cHistorico = new MyClass({
	id 						: null,
	//datos de recorrido//
	initFiltrosRecorrido	: null,
	filtrosSeteados			: null,
	iMovil					: null,
	fechaDesde				: null,
	fechaHasta				: null,
	color					: null,
	ancho					: null,
	bSentidoRecorrido		: null,
	excesoVelocidad			: null,
	filtrarVelocidad0		: null,
	tiempoMinimoRecorrido	: null,
	//////////////////////////
	//datos de eventos/////
	iMovilEvento			: null,
	fechaDesdeEvento		: null,
	fechaHastaEvento		: null,
	estadoEvento			: null,
	////////////////////
	///datos de paradas///
	iMovilParadas			: null,
	fechaDesdeParadas		: null,
	fechaHastaParadas		: null,
	tiempoDetenidoParadas	: null,
	///datos de viajes///
	iMovilViajes			: null,
	fechaDesdeViajes		: null,
	fechaHastaViajes		: null,
	resultadoViajes			: null,
	divIdResultadoViajes	: null,
	layersSimulacionViajes  : null,
	zoomSimulacionViaje 	: null,
	velocidadSimulacionViaje: null,
	///////////////
	layersHistoricoRecorrido: null,
	layersHistoricoMarkers 	: null,
	layersHistoricoRecorridoInfoPoints: null,
	layersViajes            : null,
	layersViajesMarkers     : null,
	lastPosViajeSimulate    : null,
	simulateTimeOut         : null,
	layerSimulate           : null,
	simulandoViajeId        : null,
	velocidadViaje          : null,
	simulacionEnPausa       : null,
	externPopUpsEventos 	: null,
	externPopUpsExcesos 	: null,
	externPopUpsParadas 	: null,
	posimovilHistoricoMatrix: null,
	posimovilHistoricoRPT 	: null,
	layerMarkersHistoricoRPT: null,
	layerHistoricoRecorridoCreate 	: null,//me dice si ya esta creado el layer
	layerHistoricoMarkersCreate 	: null,//me dice si ya esta creado el layer
	historicoPopupActive			: null,
	lastHistoricoID 				: null,
	cancelDrawHistoricoRecorrido	: null,
	historicoLimitXlote		: null,
	maximoHorasMapeo		: null,
	contadorEventos 		: null,
	contadorExcesos 		: null,
	contadorParadas 		: null,
	historicoFeatureBounds	: null,
	historicoLastPoint		: null,
	hist_est_velSUMA 		: null, //suma de todas las velocidades <> 0
	hist_est_velCANT  		: null, //cantidad de elementos sumados en 'hist_est_velSUMA', se usa para sacar el promedo de la velocidad.
	hist_est_velMAX  		: null, //velocidad maxima
	hist_est_disTOT  		: null, //distancia total recorrida
	///////////////////////
	bUltimaHoraReporte		: null,
	viajesHash              : null,
	viajeAnt				: null,
	mapaId                  : null,
	infoPoints              : null,//array de listados de puntos en los recorridos 
	bVerInfoPoints			: null, //array que me dice si estoy viendo o no los puntos de un recorrido
	bCuentaHistoricoHabilitado	: null, //me dice si est� o no habilitado el selector de movil/fijo 
	resultadoHistoricoRecorrido	: null, //array que contiene el html que devuelve el mapeo de un movil
	recorridoActivo			: null, //numero de recorrido activo
	cuentaRecorrido			: null, //cuenta del recorrido activo
	infoPointsViajes        : null,//array de listados de puntos en los viajes
	bVerInfoPointsViajes	: null,
	layersHistoricoViajeInfoPoints	: null,
	
	init: function(){
		this.filtrarVelocidad0 		= false;
		this.initFiltrosRecorrido	= false;
		this.ancho 					= 6;
		this.estadoEvento 			= 0;
		this.color					= "00FF00";
		this.layersHistoricoRecorrido 	= new Array();
		this.layersHistoricoMarkers 	= new Array();
		this.layersHistoricoViajeInfoPoints	= new Array();//array que acumula los puntos de cada viaje para luego poder ver la info de cada uno
		this.layersHistoricoRecorridoInfoPoints	= new Array();//array que acumula los puntos de cada recorrido para luego poder ver la info de cada uno
		this.externPopUpsEventos 		= new Array(); //array que acumula popups de eventos segun orden de creacion de recorridos historicos
		this.externPopUpsExcesos 		= new Array(); //array que acumula popups de excesos segun orden de creacion de recorridos historicos
		this.externPopUpsParadas 		= new Array(); //array que acumula popups de paradas segun orden de creacion de recorridos historicos
		this.posimovilHistoricoMatrix 	= new Array(); //posicion 0:RecorridoHistorico, 1:INICIO, 2:FIN, 3y+:EVENTOS
		this.posimovilHistoricoRPT 		= new Array(); //array para markers de eventos creadas desde reportes historicos de recorrido.
		this.viajesHash 				= new Hashtable();
		this.layersViajes            	= new Hashtable();
		this.layersViajesMarkers    	= new Hashtable();
		this.lastPosViajeSimulate       = 0;
		this.simulateTimeOut            = null;
		this.layerSimulate              = null;
		this.zoomSimulacionViaje 		= true;
		this.velocidadSimulacionViaje	= 2;
		this.layersSimulacionViajes		= new Hashtable();
		this.simulandoViajeId           = '';
		this.velocidadViaje             = 2;
		this.simulacionEnPausa          = false;
		this.layerMarkersHistoricoRPT 	= null; //capa de markers de eventos impresas desde los reportes
		this.layerHistoricoRecorridoCreate 	= false;
		this.layerHistoricoMarkersCreate 	= false;
		this.historicoPopupActive		= null;
		this.lastHistoricoID 			= 0;
		this.cancelDrawHistoricoRecorrido 	= false;
		this.historicoLimitXlote		= HISTORICO_LOTE;
		this.maximoHorasMapeo			= 48;
		this.contadorEventos 			= 0;
		this.contadorExcesos 			= 0;
		this.contadorParadas 			= 0;
		this.historicoFeatureBounds 	= new OpenLayers.Bounds();
		this.hist_est_velSUMA 			= 0; //suma de todas las velocidades <> 0
		this.hist_est_velCANT 			= 0; //cantidad de elementos sumados en 'hist_est_velSUMA', se usa para sacar el promedo de la velocidad.
		this.hist_est_velMAX			= 0; //velocidad maxima
		this.hist_est_disTOT			= 0; //distancia total recorrida
		this.filtrosSeteados			= false;
		this.bUltimaHoraReporte			= false;
		this.resultadoViajes			= "";
		this.viajeAnt					= 0;
		this.infoPoints              	= new Array();
		this.bVerInfoPoints             = new Array();
		this.bCuentaHistoricoHabilitado = true;
		this.resultadoHistoricoRecorrido= new Array();
		this.recorridoActivo			= 1;
		this.cuentaRecorrido			= null;
		this.infoPointsViajes          	= new Array();
		this.bVerInfoPointsViajes       = new Array();
	},
	////SETTERS/////

	setMapaId: function(mapaId){
		this.mapaId = mapaId;
	},
	setId: function(iId){
		this.iId = iId;
	},

	setMovil: function(iMovil){
		this.iMovil = iMovil;
	},

	setFechaDesde: function(fechaDesde){
		this.fechaDesde = fechaDesde;
	},

	setFechaHasta: function(fechaHasta){
		this.fechaHasta = fechaHasta;
	},

	setColor: function(color){
		this.color = color;
	},

	setSentidoRecorrido: function(bSentidoRecorrido){
		this.bSentidoRecorrido = bSentidoRecorrido;
	},

	setAncho: function(ancho){
		this.ancho = ancho;
	},

	setExcesoVelocidad: function(excesoVelocidad){
		this.excesoVelocidad = excesoVelocidad;
	},

	setFiltrarVelocidad0: function(filtrarVelocidad0){
		this.filtrarVelocidad0 = filtrarVelocidad0;
	},

	setTiempoMinimoRecorrido: function(tiempoMinimoRecorrido){
		this.tiempoMinimoRecorrido = tiempoMinimoRecorrido;
	},

	setInitFiltrosRecorrido: function(bInit){
		this.initFiltrosRecorrido = bInit;
	},
	////
	setLayersHistoricoRecorrido: function(layersHistoricoRecorrido){
		this.layersHistoricoRecorrido  = layersHistoricoRecorrido;
	},
	setLayersHistoricoMarkers: function(layersHistoricoMarkers){
		this.layersHistoricoMarkers = layersHistoricoMarkers ;
	},
	setLayersHistoricoRecorridoInfoPoints: function(layersHistoricoRecorridoInfoPoints){
		this.layersHistoricoRecorridoInfoPoints = layersHistoricoRecorridoInfoPoints ;
	},
	setLayersHistoricoViajeInfoPoints: function(layersHistoricoViajeInfoPoints){
		this.layersHistoricoViajeInfoPoints = layersHistoricoViajeInfoPoints ;
	},
	setExternPopUpsEventos: function(externPopUpsEventos){
		this.externPopUpsEventos = externPopUpsEventos;
	},
	setExternPopUpsExcesos: function(externPopUpsExcesos){
		this.externPopUpsExcesos = externPopUpsExcesos ;
	},
	setExternPopUpsParadas: function(externPopUpsParadas){
		this.externPopUpsParadas = externPopUpsParadas;
	},
	setPosimovilHistoricoMatrix: function(posimovilHistoricoMatrix){
		this.posimovilHistoricoMatrix = posimovilHistoricoMatrix ;
	},
	setPosimovilHistoricoRPT: function(posimovilHistoricoRPT){
		this.posimovilHistoricoRPT = posimovilHistoricoRPT;
	},
	setLayerMarkersHistoricoRPT: function(layerMarkersHistoricoRPT){
		this.layerMarkersHistoricoRPT = layerMarkersHistoricoRPT ;
	},
	setContadorExcesos: function(contadorExcesos){
		this.contadorExcesos = contadorExcesos;
	},
	setContadorEventos: function(contadorEventos){
		this.contadorEventos = contadorEventos;
	},
	setContadorParadas: function(contadorParadas){
		this.contadorParadas = contadorParadas;
	},
	setMovilEvento: function(iMovilEvento){
		this.iMovilEvento = iMovilEvento;
	},
	setFechaDesdeEvento: function(fechaDesdeEvento){
		this.fechaDesdeEvento = fechaDesdeEvento;
	},
	setFechaHastaEvento: function(fechaHastaEvento){
		this.fechaHastaEvento = fechaHastaEvento;
	},
	setEstadoEvento: function(estadoEvento){
		this.estadoEvento = estadoEvento;
	},
	setMovilParadas: function(iMovilParadas){
		this.iMovilParadas = iMovilParadas;
	},
	setFechaDesdeParadas: function(fechaDesdeParadas){
		this.fechaDesdeParadas = fechaDesdeParadas;
	},
	setFechaHastaParadas: function(fechaHastaParadas){
		this.fechaHastaParadas = fechaHastaParadas;
	},
	setTiempoDetenidoParadas: function(tiempoDetenidoParadas){
		this.tiempoDetenidoParadas = tiempoDetenidoParadas;
	},
	setLayerHistoricoRecorridoCreate: function(layerHistoricoRecorridoCreate){
		this.layerHistoricoRecorridoCreate = layerHistoricoRecorridoCreate;
	},
	////viajes///
	setMovilViajes: function(iMovilViajes){
		this.iMovilViajes = iMovilViajes;
	},
	setFechaDesdeViajes: function(fechaDesdeViajes){
		this.fechaDesdeViajes = fechaDesdeViajes;
	},
	setFechaHastaViajes: function(fechaHastaViajes){
		this.fechaHastaViajes = fechaHastaViajes;
	},
	setResultadoFiltroViajes: function(resultadoViajes){
		this.resultadoViajes = resultadoViajes;
	},
	setDivIdResultadoFiltroViajes: function(divId){
		this.divIdResultadoViajes = divId;
	},
	///////////////
	setRecorridoActivo: function(idActivo){
		this.recorridoActivo = idActivo;
	},
	////////////
	setHistoricoLastPoint: function(histLastPoint){
		this.historicoLastPoint = histLastPoint;
	},
	setHistoricoEstVelocidadMax: function(velEstMax){
		this.hist_est_velMAX = velEstMax;
	},
	setHistoricoEstVelocidadSum: function(velEstSum){
		this.hist_est_velSUMA = velEstSum;
	},
	setHistoricoEstVelocidadCant: function(velEstCant){
		this.hist_est_velCANT = velEstCant;
	},
	setHistoricoEstDistTotal: function(distanciaTotal){
		this.hist_est_disTOT = distanciaTotal;
	},
	setFlagReporteUltHora: function(flag){
		this.bUltimaHoraReporte = flag ;
	},
	setLayersViajes: function(layer) {
		this.layersViajes = layer;
	},
	setLayersSimulacionViajes: function(layer) {
		this.layersSimulacionViajes = layer;
	},
	setResultadoHistoricoRecorrido: function(pos,html) {
		this.resultadoHistoricoRecorrido[pos] = html;
	},

	////GETTERS/////
	getId: function(){
		return this.iId;
	},

	getMovil: function(){
		return this.iMovil;
	},

	getFechaDesde: function(){
		return this.fechaDesde;
	},

	getFechaHasta: function(){
		return this.fechaHasta;
	},

	getColor: function(){
		return this.color ;
	},

	getSentidoRecorrido: function(){
		return this.bSentidoRecorrido;
	},

	getAncho: function(){
		return this.ancho;
	},

	getExcesoVelocidad: function(){
		return this.excesoVelocidad;
	},

	getFiltrarVelocidad0: function(){
		return this.filtrarVelocidad0;
	},

	getTiempoMinimoRecorrido: function(){
		return this.tiempoMinimoRecorrido;
	},

	getInitFiltrosRecorrido: function(){
		return this.initFiltrosRecorrido;
	},
	getLayerHistoricoRecorridoCreate: function(){
		return this.layerHistoricoRecorridoCreate ;
	},
	////
	getLayersHistoricoRecorrido: function(){
		return this.layersHistoricoRecorrido ;
	},
	getLayersHistoricoRecorridoInfoPoints: function(){
		return this.layersHistoricoRecorridoInfoPoints  ;
	},
	getLayersHistoricoViajeInfoPoints: function(){
		return this.layersHistoricoViajeInfoPoints  ;
	},
	getExternPopUpsEventos: function(){
		return this.externPopUpsEventos ;
	},
	getExternPopUpsExcesos: function(){
		return this.externPopUpsExcesos  ;
	},
	getExternPopUpsParadas: function(){
		return this.externPopUpsParadas ;
	},
	getPosimovilHistoricoRPT: function(){
		return this.posimovilHistoricoRPT ;
	},
	getLayerMarkersHistoricoRPT: function(){
		return this.layerMarkersHistoricoRPT  ;
	},
	getPosimovilHistoricoMatrix: function(){
		return this.posimovilHistoricoMatrix  ;
	},
	getLastHistoricoID: function(){
		return this.lastHistoricoID  ;
	},
	getCancelDrawHistoricoRecorrido: function(){
		return this.cancelDrawHistoricoRecorrido  ;
	},
	getHistoricoLimitXlote: function(){
		return this.historicoLimitXlote  ;
	},
	getMaximoHorasMapeo: function(){
		return this.maximoHorasMapeo  ;
	},
	getContadorEventos: function(){
		return this.contadorEventos  ;
	},
	getContadorExcesos: function(){
		return this.contadorExcesos  ;
	},
	getContadorParadas: function(){
		return this.contadorParadas  ;
	},
	getMovilEvento: function(){
		return this.iMovilEvento ;
	},
	getFechaDesdeEvento: function(){
		return this.fechaDesdeEvento ;
	},
	getFechaHastaEvento: function(){
		return this.fechaHastaEvento ;
	},
	getEstadoEvento: function(){
		return this.estadoEvento;
	},
	getMovilParadas: function(){
		return this.iMovilParadas ;
	},
	getFechaDesdeParadas: function(){
		return this.fechaDesdeParadas;
	},
	getFechaHastaParadas: function(){
		return this.fechaHastaParadas ;
	},
	getTiempoDetenidoParadas: function(){
		return this.tiempoDetenidoParadas ;
	},
	//////////viajes/////////////
	getMovilViajes: function(){
		return this.iMovilViajes ;
	},
	getFechaDesdeViajes: function(){
		return this.fechaDesdeViajes ;
	},
	getFechaHastaViajes: function(){
		return this.fechaHastaViajes ;
	},
	getResultadoFiltroViajes: function(){
		return this.resultadoViajes;
	},
	getDivIdResultadoFiltroViajes: function(){
		return this.divIdResultadoViajes;
	},
	////////////////////////////
	getHistoricoFeatureBounds: function(){
		return this.historicoFeatureBounds ;
	},
	getHistoricoEstVelocidadSuma: function(){
		return this.hist_est_velSUMA ;
	},
	getHistoricoEstVelocidadCant: function(){
		return this.hist_est_velCANT ;
	},
	getHistoricoEstVelocidadMax: function(){
		return this.hist_est_velMAX ;
	},
	getHistoricoEstDistTot: function(){
		return this.hist_est_disTOT ;
	},
	getHistoricoLastPoint: function(){
		return this.historicoLastPoint ;
	},
	getFlagReporteUltHora: function(){
		return this.bUltimaHoraReporte ;
	},
	getViajesHash: function() {
		return this.viajesHash;
	},
	getLayersViajes: function() {
		return this.layersViajes;
	},
	getLayersSimulacionViajes: function() {
		return this.layersSimulacionViajes;
	},
	getInfoPoints: function(pos) {
		return this.infoPoints[pos];
	},
	getResultadoHistoricoRecorrido: function(pos) {
		return this.resultadoHistoricoRecorrido[pos];
	},
	getInfoPointsViajes: function(pos) {
		return this.infoPointsViajes[pos];
	},
	getRecorridoActivo: function(){
		return this.recorridoActivo;
	},
	//////////////////////////////////////////////////////////////
	getInfoRecorridoHistoricoINI: function(idRecorrido, posiMovilReduce) {
		var mapaId = cMapController.getMapActive().getId();
		var recorridoHIS = this.posimovilHistoricoMatrix[idRecorrido][0];
		var LonLatInicio = new OpenLayers.LonLat(posiMovilReduce.longitud, posiMovilReduce.latitud).transform(cMapController.getMapActive().getDisplayProjection(), cMapController.getMapActive().getProjection() );
		var movil = misVehiculosHash.get(recorridoHIS.idMovil);
		idRecorrido = idRecorrido+1;
		this.recorridoActivo = idRecorrido;
		var html = "<div style='width:220px;height:150px;'>";//div1
		html += "<div id='histIni_"+idRecorrido+mapaId+"'>";//div2
    	html += '<table width="200" border="0" cellpadding="0" cellspacing="0" >';
		html += '<tr><td colspan="2"><span class="resaltado">Inicio de recorrido historico n&deg;'+idRecorrido+' </span></td></tr>';
		var myDate2 = new MyDate(posiMovilReduce.fechaMensaje);
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Fecha GPS: </span></span><span class="inputTEXT">' + myDate2.elegantFormat() + '</span></td></tr>';
		html += '<tr><td colspan="2" align="left"><a href="javascript:;" onclick="clickMap5('+mapaId+');$j(\'#histIni_'+idRecorrido+mapaId+'\').hide();$j(\'#histIni_'+idRecorrido+mapaId+'_posicion\').show();">Ver datos de posicion</a></td></tr>'; 
		html += '<tr><td colspan="2" align="left"><a href="javascript:;" onclick="cMapController.getMapById('+mapaId+').getHistorico().mostrarResultadoRecorrido('+idRecorrido+','+mapaId+')">Ver resumen en menu</a></td></tr>'; 
		if(!this.bVerInfoPoints[idRecorrido]){
			html +='<tr><td colspan="2" align="left"><a href="javascript:;" onclick="cMapController.getMapById('+mapaId+').getHistorico().drawHistoricoInfoPoints('+mapaId+','+idRecorrido+');" id="histIniVerPuntosA'+idRecorrido+mapaId+'">Ver puntos de recorrido</a></td></tr>';
		}else{	
			html +='<tr><td colspan="2" align="left"><a href="javascript:;" onclick="cMapController.getMapById('+mapaId+').getHistorico().ocultarHistoricoInfoPoints('+mapaId+','+idRecorrido+');" id="histIniVerPuntosA'+idRecorrido+mapaId+'">Ocultar puntos de recorrido</a></td></tr>';
		}
	
		html += '<tr><td colspan="2" align="left"><hr></td></tr>';
    	html += '<tr><td colspan="2" align="left"><span class="inputLBL">Movil: </span><span class="inputTEXT">' + movil.label + '</span></td></tr>';
		var myDate = new MyDate(recorridoHIS.fechaDde);
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Desde: </span><span class="inputTEXT">' + myDate.elegantFormat() + '</span></td></tr>';
		myDate = new MyDate(recorridoHIS.fechaHta);
		html += '<td colspan="2" align="left"><span class="inputLBL">Hasta: </span><span class="inputTEXT">' + myDate.elegantFormat() + '</span></td></tr>';
        //html += '<tr><td colspan="2" align="left"><span class="inputLBL">Recorrido: </span><span class="inputTEXT">' +  idRecorrido + '</span></td></tr>';
        html += '</table>';
        html += '</div>';//div2 Fin
        html += "<div id='histIni_"+idRecorrido+mapaId+"_posicion' style='display:none;'>";//div3
        html += '<table width="200" border="0" cellpadding="0" cellspacing="0">';
        html += '<tr><td colspan="2" ><span class="resaltado">Inicio de recorrido historico n&deg;'+idRecorrido+' </span></td></tr>';
        myDate2 = new MyDate(posiMovilReduce.fechaMensaje);
        html += '<tr><td colspan="2" align="left"><span class="inputLBL">Fecha GPS: </span></span><span class="inputTEXT">' + myDate2.elegantFormat() + '</span></td></tr>';
        html += '<tr><td colspan="2" align="left"><a href="javascript:;" onclick="clickMap5('+mapaId+');$j(\'#histIni_'+idRecorrido+mapaId+'\').show();$j(\'#histIni_'+idRecorrido+mapaId+'_posicion\').hide();">Ver resumen</a></td></tr>';
        html += '<tr><td colspan="2" align="left"><a href="javascript:;" onclick="cMapController.getMapById('+mapaId+').getHistorico().mostrarResultadoRecorrido('+idRecorrido+','+mapaId+')">Ver resumen en menu</a></td></tr>';
        if(!this.bVerInfoPoints[idRecorrido]){
        	html +='<tr><td colspan="2" align="left"><a href="javascript:;" onclick="cMapController.getMapById('+mapaId+').getHistorico().drawHistoricoInfoPoints('+mapaId+','+idRecorrido+');" id="histIniVerPuntosB'+idRecorrido+mapaId+'">Ver puntos de recorrido</a></td></tr>';
        }else{	
        	html +='<tr><td colspan="2" align="left"><a href="javascript:;" onclick="cMapController.getMapById('+mapaId+').getHistorico().ocultarHistoricoInfoPoints('+mapaId+','+idRecorrido+');" id="histIniVerPuntosB'+idRecorrido+mapaId+'">Ocultar puntos de recorrido</a></td></tr>';
        }
        html += '<tr><td colspan="2" align="left"><hr></td></tr>';
        html += '</table>';
        
        html += "<div style='overflow:auto;height:88px;' >";
        html += '<table>';
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Direcci&oacute;n: </span><span class="inputTEXT">' + posiMovilReduce.direccionAbrev + '</span></td></tr>';
    	html += '<tr><td colspan="2" align="left"><span class="inputLBL">Latitud: </span><span class="inputTEXT">' + posiMovilReduce.latitud + '</span></td></tr>';
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Longitud: </span><span class="inputTEXT">' + posiMovilReduce.longitud + '</span></td></tr>';
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Sat&eacute;lites: </span><span class="inputTEXT">' + posiMovilReduce.satelites + '</span></td></tr>';
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Sentido: </span><span class="inputTEXT">' + posiMovilReduce.sentidoPalabra + '</span></td></tr>';
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Velocidad: </span><span class="inputTEXT">' + posiMovilReduce.velocidad + '</span></td></tr>';
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Evento: </span><span class="inputTEXT">' + posiMovilReduce.evento + '</span></td></tr>';
		html += '</table>';
		html += '</div>';
		html += '</div>';
		html += '</div>';
		return html;
    },

    getInfoRecorridoHistoricoFIN: function(idRecorrido, posiMovilReduce) {
    	var mapaId = cMapController.getMapActive().getId();
		var recorridoHIS = this.posimovilHistoricoMatrix[idRecorrido][0];
		var LonLatInicio = new OpenLayers.LonLat(posiMovilReduce.longitud, posiMovilReduce.latitud).transform(cMapController.getMapActive().getDisplayProjection(), 	cMapController.getMapActive().getProjection());
		var movil = misVehiculosHash.get(recorridoHIS.idMovil);
		idRecorrido = idRecorrido+1;
		this.recorridoActivo = idRecorrido;
		var html = "<div style='width:220px;height:150px;'>";
		html += "<div id='histFin_"+idRecorrido+mapaId+"'>";
    	html += '<table width="200" border="0" cellpadding="0" cellspacing="0" >';
		html += '<tr><td colspan="2" ><span class="resaltado">Fin de recorrido historico n&deg;'+idRecorrido+' </span></td></tr>';
		var myDate2 = new MyDate(posiMovilReduce.fechaMensaje);
	    html += '<tr><td colspan="2" align="left"><span class="inputLBL">Fecha GPS: </span></span><span class="inputTEXT">' + myDate2.elegantFormat() + '</span></td></tr>';
		html += '<tr><td colspan="2" align="left"><a href="javascript:;" onclick="clickMap5('+mapaId+');$j(\'#histFin_'+idRecorrido+mapaId+'\').hide();$j(\'#histFin_'+idRecorrido+mapaId+'_posicion\').show();">Ver datos de posicion</a></td></tr>';
		html += '<tr><td colspan="2" align="left"><a href="javascript:;" onclick="cMapController.getMapById('+mapaId+').getHistorico().mostrarResultadoRecorrido('+idRecorrido+','+mapaId+')">Ver resumen en menu</a></td></tr>';
		if(!this.bVerInfoPoints[idRecorrido]){	
			html +='<tr><td colspan="2" align="left"><a href="javascript:;" onclick="cMapController.getMapById('+mapaId+').getHistorico().drawHistoricoInfoPoints('+mapaId+','+idRecorrido+');" id="histFinVerPuntosA'+idRecorrido+mapaId+'">Ver puntos de recorrido</a></td></tr>';
		}else{
			html +='<tr><td colspan="2" align="left"><a href="javascript:;" onclick="cMapController.getMapById('+mapaId+').getHistorico().ocultarHistoricoInfoPoints('+mapaId+','+idRecorrido+');" id="histFinVerPuntosA'+idRecorrido+mapaId+'">Ocultar puntos de recorrido</a></td></tr>';
		}
		html += '<tr><td colspan="2" align="left"><hr /></td></tr>';
    	html += '<tr><td colspan="2" align="left"><span class="inputLBL">Movil: </span><span class="inputTEXT">' + movil.label + '</span></td></tr>';
		var myDate = new MyDate(recorridoHIS.fechaDde);
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Desde: </span><span class="inputTEXT">' +  myDate.elegantFormat() + '</span></td></tr>';
		myDate = new MyDate(recorridoHIS.fechaHta);
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Hasta: </span><span class="inputTEXT">' +  myDate.elegantFormat() + '</span></td></tr>';
       // html += '<tr><td colspan="2" align="left"><span class="inputLBL">Recorrido: </span><span class="inputTEXT">' +  idRecorrido + '</span></td></tr>';
		html += '<tr><td colspan="2" align="left"><hr /></td></tr>';
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Velocidad promedio: </span><span class="inputTEXT">' +  recorridoHIS.velPromedio + ' km/h</span></td></tr>';
        html += '<tr><td colspan="2" align="left"><span class="inputLBL">Velocidad m&aacute;xima: </span><span class="inputTEXT">' +  recorridoHIS.velMaxima + ' km/h</span></td></tr>';
        html += '<tr><td colspan="2" align="left"><span class="inputLBL">Distancia recorrida: </span><span class="inputTEXT">' +  recorridoHIS.recorridoTotal + '</span></td></tr>';
		html += '</table>';
        html += '</div>';
        html += "<div id='histFin_"+idRecorrido+mapaId+"_posicion' style='display:none;' >";
        html += '<table width="200"  border="0" cellpadding="0" cellspacing="0">';
        html += '<tr><td colspan="2" ><span class="resaltado">Fin de recorrido historico n&deg;'+idRecorrido+' </span></td></tr>';
        myDate2 = new MyDate(posiMovilReduce.fechaMensaje);
        html += '<tr><td colspan="2" align="left"><span class="inputLBL">Fecha GPS: </span></span><span class="inputTEXT">' + myDate2.elegantFormat() + '</span></td></tr>';
        html += '<tr><td colspan="2" align="left"><a href="javascript:;" onclick="clickMap5('+mapaId+');$j(\'#histFin_'+idRecorrido+mapaId+'\').show();$j(\'#histFin_'+idRecorrido+mapaId+'_posicion\').hide();">Ver resumen</a></td></tr>';
        html += '<tr><td colspan="2" align="left"><a href="javascript:;" onclick="cMapController.getMapById('+mapaId+').getHistorico().mostrarResultadoRecorrido('+idRecorrido+','+mapaId+')">Ver resumen en menu</a></td></tr>';
        if(!this.bVerInfoPoints[idRecorrido]){	
        	html +='<tr><td colspan="2" align="left"><a href="javascript:;" onclick="cMapController.getMapById('+mapaId+').getHistorico().drawHistoricoInfoPoints('+mapaId+','+idRecorrido+');" id="histFinVerPuntosB'+idRecorrido+mapaId+'">Ver puntos de recorrido</a></td></tr>';
        }else{
        	html +='<tr><td colspan="2" align="left"><a href="javascript:;" onclick="cMapController.getMapById('+mapaId+').getHistorico().ocultarHistoricoInfoPoints('+mapaId+','+idRecorrido+');" id="histFinVerPuntosB'+idRecorrido+mapaId+'">Ocultar puntos de recorrido</a></td></tr>';
        }        	
       	html += '<tr><td colspan="2" align="left"><hr /></td></tr>';
        html += '</table>';
        
        html += "<div style='overflow:auto;height:88px;' >";
        html += '<table>';
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Direcci&oacute;n: </span><span class="inputTEXT">' + posiMovilReduce.direccionAbrev + '</span></td></tr>';
    	html += '<tr><td colspan="2" align="left"><span class="inputLBL">Latitud: </span><span class="inputTEXT">' + posiMovilReduce.latitud + '</span></td></tr>';
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Longitud: </span><span class="inputTEXT">' + posiMovilReduce.longitud + '</span></td></tr>';
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Sat&eacute;lites: </span><span class="inputTEXT">' + posiMovilReduce.satelites + '</span></td></tr>';
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Sentido: </span><span class="inputTEXT">' + posiMovilReduce.sentidoPalabra + '</span></td></tr>';
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Velocidad: </span><span class="inputTEXT">' + posiMovilReduce.velocidad + '</span></td></tr>';
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Evento: </span><span class="inputTEXT">' + posiMovilReduce.evento + '</span></td></tr>';
		html += '</table>';
		html += '</div>';
		html += '</div>';
		html += '</div>';

		return html;
    },

    getInfoRecorridoHistoricoEVENTO: function(idRecorrido, posEvento, time, invalido, exceso, evento, parada, fuerazona) {
    	if(this.lastHistoricoID<0){
    		this.lastHistoricoID = 0;
    	}
		var recorridoHIS = this.posimovilHistoricoMatrix[this.lastHistoricoID][0];
		var posiMovilReduce = this.posimovilHistoricoMatrix[idRecorrido][posEvento];
		var LonLatInicio = new OpenLayers.LonLat(posiMovilReduce.longitud, posiMovilReduce.latitud).transform(cMapController.getMapActive().getDisplayProjection(), 	cMapController.getMapActive().getProjection());
		var movil = misVehiculosHash.get(recorridoHIS.idMovil);
		var html = "<div class='popupGlobal'>";
		html += "<div id='histInfoEvento_"+idRecorrido+"' class='popupContent'>";
    	html += '<table width="200" border="0" cellpadding="0" cellspacing="0" >';
    //	var html = '<table border="0" width="300">';
		html += '<tr><td><span class="resaltado">' + movil.label + '</span></td><td align="right">';
		html += '<table border=0 cellpadding="0" cellspacing="0"><tr>';
		html += '<td width="16">';
		if (invalido)
			html += '<img src="images/alertaIcon.gif" border="0" >';
		html += '</td>';
		html += '<td width="16">';
		if (exceso)
			html += '<img src="images/excesoIcon.gif" border="0" >';
		html += '</td>';
		html += '<td width="16">';
		if (evento)
			html += '<img src="images/eventoIcon.gif" border="0" >';
		html += '</td>';
		html += '<td width="16">';
		if (parada)
			html += '<img src="images/paradaIcon.gif" border="0" >';
		html += '</td>';
		html += '<td width="16">';
		if (fuerazona)
			html += '<img src="images/zonaprohibidaIcon.gif" border="0" >';
		html += '</td>';
		html += '</tr></table></td></tr>';
    	html += '<tr><td colspan="2" align="left"><span class="inputLBL">Patente: </span><span class="inputTEXT">' +  movil.patente + '</span></td></tr>';
    	html += '<tr><td colspan="2" align="left"><hr></td></tr>';
		if (evento){
			if (posiMovilReduce.codigoAlfaName=='')
				texto = 'No reconocido';
			else
				texto = posiMovilReduce.codigoAlfaName;
    		html += '<tr><td colspan="2" align="left" aling="center"><span class="inputLBL">Evento: </span><span class="inputTEXT">('+ posiMovilReduce.evento + ') ' + texto + '</span></td></tr>';
		}
		if (parada){
			html += '<tr><td colspan="2" align="left"><span class="inputLBL" style="color:red;">Tiempo detenido: </span><span class="inputTEXT">' + time + '</span></td></tr>';
		}
		var myDate = new MyDate(posiMovilReduce.fechaMensaje);
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Fecha GPS: </span><span class="inputTEXT">' + myDate.elegantFormat() + '</span></td></tr>'
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Direcci&oacute;n: </span><span class="inputTEXT">' + posiMovilReduce.direccionAbrev + '</span></td></tr>';

	    html += '<tr><td align="left"><span class="inputLBL">Latitud: </span><span class="inputTEXT">' + posiMovilReduce.latitud + '</span></td></tr>';
		html += '<tr><td align="left"><span class="inputLBL">Longitud: </span><span class="inputTEXT">' + posiMovilReduce.longitud + '</span></td></tr>';
		if (!parada){
			html += '<tr><td colspan="2" align="left"><span class="inputLBL">Sat&eacute;lites: </span><span class="inputTEXT">' + posiMovilReduce.satelites + '</span></td></tr>';
			html += '<tr><td colspan="2" align="left"><span class="inputLBL">Sentido: </span><span class="inputTEXT">' + posiMovilReduce.sentidoPalabra + '</span></td></tr>';
			html += '<tr><td colspan="2" align="left"><span class="inputLBL">Velocidad: </span><span class="inputTEXT">' + posiMovilReduce.velocidad + '</span></td></tr>';
		}
		html += '</table>';
		html += '</div>';
		html += '</div>';
		return html;
    },

    getInfoRecorridoHistoricoDdeRPT: function(posEvt, movilID, invalido, exceso, evento, fuerazona) {
		var posiMovilReduce = this.posimovilHistoricoRPT[posEvt];
		var LonLatInicio = new OpenLayers.LonLat(posiMovilReduce.longitud, posiMovilReduce.latitud).transform(cMapController.getMapActive().getDisplayProjection(), 	cMapController.getMapActive().getProjection());
		var movil = misVehiculosHash.get(movilID.toString());
		var html = "<div class='popupGlobal'>";
		html += "<div id='histInfo_"+movilID+"' class='popupContent'>";
    	html += '<table width="200" border="0" cellpadding="0" cellspacing="0" >';
    	//var html = '<table border="0" width="300">';
		html += '<tr><td><span class="resaltado">' + movil.label + '</span></td><td align="right">';
		html += '<table border=0 cellpadding="0" cellspacing="0"><tr>';
		html += '<td width="16">';
		if (invalido)
			html += '<img src="images/alertaIcon.gif" border="0" >';
		html += '</td>';
		html += '<td width="16">';
		if (exceso)
			html += '<img src="images/excesoIcon.gif" border="0" >';
		html += '</td>';
		html += '<td width="16">';
		if (evento)
			html += '<img src="images/eventoIcon.gif" border="0" >';
		html += '</td>';
		html += '<td width="16">';
		if (fuerazona)
			html += '<img src="images/zonaprohibidaIcon.gif" border="0" >';
		html += '</td>';
		html += '</tr></table></td></tr>';
    	html += '<tr><td colspan="2" align="left"><span class="inputLBL">Patente: </span><span class="inputTEXT">' +  movil.patente + '</span></td></tr>';
    	html += '<tr><td colspan="2" align="left"><hr></td></tr>';
		if ((posiMovilReduce.codigoAlfa=='TST')||(posiMovilReduce.codigoAlfa=='')||(posiMovilReduce.codigoAlfa==null))
			texto = 'No reconocido';
		else
			texto = posiMovilReduce.codigoAlfaName	;

    	html += '<tr><td colspan="2" align="left" aling="center"><span class="inputLBL">Evento: </span><span class="inputTEXT">(' + posiMovilReduce.evento + ') ' + texto + '</span></td></tr>';
		var myDate = new MyDate(posiMovilReduce.fechaMensaje);
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Fecha GPS: </span><span class="inputTEXT">' + myDate.elegantFormat() + '</span></td></tr>'
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Direcci&oacute;n: </span><span class="inputTEXT">' + posiMovilReduce.direccionAbrev + '</span></td></tr>';
    	html += '<tr><td align="left"><span class="inputLBL">Latitud: </span><span class="inputTEXT">' + posiMovilReduce.latitud + '</span></td></tr>';
		html += '<tr><td align="left"><span class="inputLBL">Longitud: </span><span class="inputTEXT">' + posiMovilReduce.longitud + '</span></td></tr>';
		html += '<tr><td align="left"><span class="inputLBL">Sat&eacute;lites: </span><span class="inputTEXT">' + posiMovilReduce.satelites + '</span></td></tr>';
		html += '<tr><td align="left"><span class="inputLBL">Sentido: </span><span class="inputTEXT">' + posiMovilReduce.sentidoPalabra + '</span></td></tr>';
		html += '<tr><td align="left"><span class="inputLBL">Velocidad: </span><span class="inputTEXT">' + posiMovilReduce.velocidad + '</span></td></tr>';
		html += '</table>';
		html += '</div>';
		html += '</div>';

		return html;
    },

    getInfoParadaHistoricoDdeRPT: function(cta, time, fecha, direccion, lat, lon) {
		var movil = misVehiculosHash.get(cta.toString());
		var html = "<div class='popupGlobal'>";
		html += "<div id='histInfo_"+cta+"' class='popupContent'>";
    	html += '<table width="200" border="0" cellpadding="0" cellspacing="0" >';
    	//var html = '<table border="0" width="350">';
		html += '<tr><td><span class="resaltado">' + movil.label + '</span></td><td align="right">';
		html += '<table border=0 cellpadding="0" cellspacing="0"><tr>';
		html += '<td width="16">';
		html += '<img src="images/paradaIcon.gif" border="0" >';
		html += '</td>';
		html += '</tr></table></td></tr>';
    	html += '<tr><td colspan="2" align="left"><span class="inputLBL">Patente: </span><span class="inputTEXT">' +  movil.patente + '</span></td></tr>';
    	html += '<tr><td colspan="2" align="left"><hr></td></tr>';
		html += '<tr><td align="left"><span class="inputLBL" style="color:red;">Tiempo detenido: </span><span class="inputTEXT">' + unescape(time) + '</span></td></tr>';
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Fecha GPS: </span><span class="inputTEXT">' + unescape(fecha) + '</span></td></tr>'
		html += '<tr><td align="left"><span class="inputLBL">Direcci&oacute;n: </span><span class="inputTEXT">' + unescape(direccion) + '</span></td></tr>';
	    html += '<tr><td align="left"><span class="inputLBL">Latitud: </span><span class="inputTEXT">' + lat + '</span></td></tr>';
		html += '<tr><td align="left"><span class="inputLBL">Longitud: </span><span class="inputTEXT">' + lon + '</span></td></tr>';
		html += '</table>';
		html += '</div>';
		html += '</div>';
		return html;
    },

    openPopUpPanelExcesos: function(){
		var historicoID = this.layersHistoricoRecorrido.length - 1;
		var movil = misVehiculosHash.get(document.getElementById('cuentaSelectHistorico').value);
		var HTML = '<table cellspacing="0" cellpadding="0">';
		HTML += '<tr><td width="100"><span class="inputLBL">Movil:</span></td><td><span class="inputTEXT">'+movil.label+'</span></td></tr>';
		var myDate = new MyDate(document.getElementById('fechaInicio').value);
		HTML += '<tr><td><span class="inputLBL">Desde:</span></td><td><span class="inputTEXT">'+myDate.elegantFormat()+'</span></td></tr>';
		myDate = new MyDate(document.getElementById('fechaFin').value);
		HTML += '<tr><td><span class="inputLBL">Hasta:</span></td><td><span class="inputTEXT">'+myDate.elegantFormat()+'</span></td></tr>';
		HTML += '</table><br/>';
		HTML += '<div id="panel_excesosHistoricoPopUp" style="overflow:auto; height:200px; width:285px;">'
		HTML += document.getElementById('panel_excesosHistorico').innerHTML;
		HTML += '</div>';
		HTML = HTML.replace('id="excesosTablePrint"','');
		this.externPopUpsExcesos[historicoID] = dhtmlwindow.open('infoWindowExceso'+historicoID, 'inline', HTML, 'Recorrido Historico #'+historicoID+': EXCESOS', 'width=300px,height=300px,left=200px,top=150px,resize=0,scrolling=0');
	},

	finExcesos: function() {
		divExcesosHTML += '</table></div></div>'
		document.getElementById('div_excesosHistorico').innerHTML = divExcesosHTML;
		divExcesosHTML = "";
		if (this.contadorExcesos==0){
			hideDiv('div_excesosHistorico');
			$j("#recorridoExcesosBTN").hide();
		}else{
			var tableExcesosTop = '<table width="100%"><tr>';
			tableExcesosTop += '<td><span class="resaltado">Excesos (' + this.contadorExcesos + ')</span></td>';
			tableExcesosTop += '<td width="24"><img src="images/openPanelIcon.gif" id="panel_excesosHistoricoIMG" style="cursor: pointer;" title="Abrir panel de excesos" onclick="cMapController.getMapActive().getHistorico().collapsePanelExcesos();" /></td>';
			tableExcesosTop += '<td  width="24"><img src="images/openPopUpIcon.gif" id="panel_excesosHistoricoIMG" style="cursor: pointer;" title="Abrir panel de excesos en un popup" onclick="cMapController.getMapActive().getHistorico().openPopUpPanelExcesos();" /></td>';
			tableExcesosTop += '</tr></table>';
			document.getElementById('top_excesosHistorico').innerHTML = tableExcesosTop;
			hideDiv('panel_excesosHistorico')
			showDiv('div_excesosHistorico');
			$j("#recorridoExcesosBTN").show();
		}
	},

	collapsePanelExcesos: function() {
	    var img = document.getElementById('panel_excesosHistoricoIMG');
	    if (document.getElementById('panel_excesosHistorico').style.display == "none"){
	      img.src = "images/collapsePanelIcon.gif";
	      img.title = "Colapsar el panel de excesos";
	      showDiv('panel_excesosHistorico');
	    }else{
	      img.src = "images/openPanelIcon.gif";
	      img.title = "Mostrar el panel de excesos";
	      hideDiv('panel_excesosHistorico');
	    }
	},
	  
	collapsePanelEventos: function() {
		var img = document.getElementById('panel_eventosHistoricoIMG');
		if (document.getElementById('panel_eventosHistorico').style.display == "none"){
			img.src = "images/collapsePanelIcon.gif";
			img.title = "Colapsar el panel de eventos";
			showDiv('panel_eventosHistorico');
		}else {
			img.src = "images/openPanelIcon.gif";
			img.title = "Mostrar el panel de eventos";
			hideDiv('panel_eventosHistorico');
		}
	},

	openPopUpPanelEventos: function(){
		var historicoID = this.layersHistoricoRecorrido.length - 1;
		var movil = misVehiculosHash.get(document.getElementById('cuentaSelectHistorico').value);
		var HTML = '<table cellspacing="0" cellpadding="0">';
		HTML += '<tr><td width="100"><span class="inputLBL">Movil:</span></td><td><span class="inputTEXT">'+ movil.label +'</span></td></tr>';
		var myDate = new MyDate(document.getElementById('fechaInicio').value);
		HTML += '<tr><td><span class="inputLBL">Desde:</span></td><td><span class="inputTEXT">'+myDate.elegantFormat()+'</span></td></tr>';
		myDate = new MyDate(document.getElementById('fechaFin').value);
		HTML += '<tr><td><span class="inputLBL">Hasta:</span></td><td><span class="inputTEXT">'+myDate.elegantFormat()+'</span></td></tr>';
		HTML += '</table><br/>';
		HTML += '<div id="panel_eventosHistoricoPopUp" style="overflow:auto; height:200px; width:485px;">'
		HTML += document.getElementById('panel_eventosHistorico').innerHTML;
		HTML += '</div>';
		HTML = HTML.replace('id="eventosTablePrint"','');
		this.externPopUpsEventos[historicoID] = dhtmlwindow.open('infoWindowEvento'+historicoID, 'inline', HTML, 'Recorrido Historico #'+historicoID+': EVENTOS', 'width=500px,height=300px,left=200px,top=150px,resize=0,scrolling=0');
	},
	finEventos: function() {
		divEventosHTML += '</table></div></div>';
		document.getElementById('div_eventosHistorico').innerHTML = divEventosHTML;
		divEventosHTML = "";
		if (this.contadorEventos==0){
			hideDiv('div_eventosHistorico');
		}else{
			var tableEventosTop = '<table width="100%"><tr>';
			tableEventosTop += '<td><span class="resaltado">Eventos (' + this.contadorEventos + ')</span></td>';
			tableEventosTop += '<td width="24"><img src="images/openPanelIcon.gif" id="panel_eventosHistoricoIMG" style="cursor: pointer;" title="Abrir panel de eventos" onclick="cMapController.getMapActive().getHistorico().collapsePanelEventos();" /></td>';
			tableEventosTop += '<td  width="24"><img src="images/openPopUpIcon.gif" id="panel_eventosHistoricoIMG" style="cursor: pointer;" title="Abrir panel de eventos en un popup" onclick="cMapController.getMapActive().getHistorico().openPopUpPanelEventos();" /></td>';
			tableEventosTop += '</tr></table>';
			document.getElementById('top_eventosHistorico').innerHTML = tableEventosTop;
			hideDiv('panel_eventosHistorico');
			showDiv('div_eventosHistorico');
		}
	},

	collapsePanelParadas: function() {
		var img = document.getElementById('panel_paradasHistoricoIMG');
		if (document.getElementById('panel_paradasHistorico').style.display == "none"){
			img.src = "images/collapsePanelIcon.gif";
			img.title = "Colapsar el panel de paradas";
			showDiv('panel_paradasHistorico');
		}
		else {
			img.src = "images/openPanelIcon.gif";
			img.title = "Mostrar el panel de paradas";
			hideDiv('panel_paradasHistorico');
		}
	},

	openPopUpPanelParadas: function(){
		var historicoID = this.layersHistoricoRecorrido.length - 1;
		var movil = misVehiculosHash.get(document.getElementById('cuentaSelectHistorico').value);
		var HTML = '<table cellspacing="0" cellpadding="0">';
		HTML += '<tr><td width="100"><span class="inputLBL">Movil:</span></td><td><span class="inputTEXT">'+movil.label+'</span></td></tr>';
		var myDate = new MyDate(document.getElementById('fechaInicio').value);
		HTML += '<tr><td><span class="inputLBL">Desde:</span></td><td><span class="inputTEXT">'+myDate.elegantFormat()+'</span></td></tr>';
		myDate = new MyDate(document.getElementById('fechaFin').value);
		HTML += '<tr><td><span class="inputLBL">Hasta:</span></td><td><span class="inputTEXT">'+myDate.elegantFormat()+'</span></td></tr>';
		HTML += '</table><br/>';
		HTML += '<div id="panel_paradasHistoricoPopUp" style="overflow:auto; height:200px; width:285px;">'
		HTML += document.getElementById('panel_paradasHistorico').innerHTML;
		HTML += '</div>';
		HTML = HTML.replace('id="paradasTablePrint"','');
		this.externPopUpsParadas[historicoID] = dhtmlwindow.open('infoWindowParadas'+historicoID, 'inline', HTML, 'Recorrido Historico #'+historicoID+': PARADAS', 'width=300px,height=300px,left=200px,top=150px,resize=0,scrolling=0');
	},

	finParadas: function() {
		divParadasHTML += '</table></div></div>';
		document.getElementById('div_paradasHistorico').innerHTML = divParadasHTML;
		divParadasHTML = "";
		if (this.contadorParadas==0){
			hideDiv('div_paradasHistorico');
			document.getElementById('recorridoStopBTN').style.display='none';
		}else{
			var tableParadasTop = '<table width="100%"><tr>';
			tableParadasTop += '<td><span class="resaltado">Paradas (' + this.contadorParadas + ')</span></td>';
			tableParadasTop += '<td width="24"><img src="images/openPanelIcon.gif" id="panel_paradasHistoricoIMG" style="cursor: pointer;" title="Abrir panel de paradas" onclick="cMapController.getMapActive().getHistorico().collapsePanelParadas();" /></td>';
			tableParadasTop += '<td  width="24"><img src="images/openPopUpIcon.gif" id="panel_paradasHistoricoIMG" style="cursor: pointer;" title="Abrir panel de paradas en un popup" onclick="cMapController.getMapActive().getHistorico().openPopUpPanelParadas();" /></td>';
			tableParadasTop += '</tr></table>';
			document.getElementById('top_paradasHistorico').innerHTML = tableParadasTop;
			hideDiv('panel_paradasHistorico')
			showDiv('div_paradasHistorico');
			document.getElementById('recorridoStopBTN').style.display='';
		}
	},

	clearHistoricos: function(){
		this.clearEventoReporteRecorrido();
		var length = this.layersHistoricoRecorrido.length;
		for (var i=0; i<length; i++){
			this.clearLayerHistoricoRecorrido();
		}
		this.layersHistoricoRecorrido = new Array();
		this.layersHistoricoMarkers = new Array();
		this.layersHistoricoRecorridoInfoPoints = new Array();
		this.externPopUpsEventos = new Array();
		this.externPopUpsExcesos = new Array();
		this.externPopUpsParadas = new Array();
		this.infoPoints	= new Array();
		this.bVerInfoPoints	= new Array();
	},

	clearHistoricoRecorrido: function(){
		this.habilitarSelectorHistorico();
		this.clearLayerHistoricoRecorrido();
		hideDiv('div_resultadoHistorico');
		showDiv('div_filtroHistorico');
	},

	drawHistoricoMarker: function(mapaId, point, tipo, getInfoFunc, historicoID){ //tipo: 0=inicio, 1=fin, 2=evento, 3=exceso
		var pos = 0;
		if(this.layersHistoricoMarkers.length>0){
			pos = this.layersHistoricoMarkers.length-1;
		}

		if (historicoID!=null){
			pos = historicoID;
		}else{
			if (!this.layerHistoricoMarkersCreate){
				pos = this.layersHistoricoMarkers.length;
				this.layersHistoricoMarkers[pos] = new OpenLayers.Layer.Markers("");
				this.layersHistoricoMarkers[pos].id = "RecorridoMarkers"+this.layerHistoricoMarkersCreate.length;
				//cMapController.getMapActive().getMap().addLayer(this.layersHistoricoMarkers[pos]);
				cMapController.getMapById(mapaId).getMap().addLayer(this.layersHistoricoMarkers[pos]);
				if (VEH_SIMPLEVIEW==1){
					this.layersHistoricoMarkers[pos].div.style.zIndex = 902;
				}else{
					this.layersHistoricoMarkers[pos].div.style.zIndex = 902;
				}
				this.layerHistoricoMarkersCreate = true;
		  	}
		}
		var icono;
		switch (parseInt(tipo)){
			case 0: icono = (mapIcons.getHistoricoIcon('inicio')); break;
			case 1: icono = (mapIcons.getHistoricoIcon('fin')); break;
			case 2: icono = (mapIcons.getHistoricoIcon('evento')); break;
			case 3: icono = (mapIcons.getHistoricoIcon('exceso')); break;
			case 4: icono = (mapIcons.getHistoricoIcon('parada')); break;
			default: icono = (mapIcons.getHistoricoIcon('inicio'));
		}
		//icono.setOpacity(0.9);
		var marker = new OpenLayers.Marker(point, icono);
		marker.events.register("click", marker, function() {
			cMapController.getMapById(mapaId).openInfoEvento(point, getInfoFunc());
        	});
	
		if (this.layersHistoricoMarkers[pos]==undefined){
			this.drawEventoFromReport(point, tipo, getInfoFunc) ;
	  	}else{
	  		this.layersHistoricoMarkers[pos].addMarker(marker);
	  	}
	},

	clearLayerHistoricoRecorrido: function(posLayer){
		if(posLayer == null){
			posLayer = this.layersHistoricoRecorrido.length-1;
		}
		if(posLayer<0){
			posLayer = 0;
		}
		this.lastHistoricoID--;
		var oLayer = this.layersHistoricoRecorrido[posLayer];
		if(oLayer==null){
			return false;
		}
		cMapController.getMapActive().getMap().removeLayer(oLayer);
		oLayer.destroy();
		this.layersHistoricoRecorrido.splice(posLayer,1);
		cMapController.getMapActive().getMap().removeLayer(this.layersHistoricoMarkers[posLayer]);
		this.layersHistoricoMarkers[posLayer].destroy();
		this.layersHistoricoMarkers.splice(posLayer,1);
		
		var posInfoPoints = posLayer+1;
		var oLayerInfoPoints = this.layersHistoricoRecorridoInfoPoints[posInfoPoints];
		if(oLayerInfoPoints!=null){
			cMapController.getMapActive().getMap().removeLayer(oLayerInfoPoints);
			this.layersHistoricoRecorridoInfoPoints[posInfoPoints].destroy();
			this.layersHistoricoRecorridoInfoPoints.splice(posInfoPoints,1);
		}
		if (this.externPopUpsEventos[posLayer]!=null){
			this.externPopUpsEventos[posLayer].close();
			this.externPopUpsEventos[posLayer]=null;
		}
		if (this.externPopUpsExcesos[posLayer]!=null){
			this.externPopUpsExcesos[posLayer].close();
			this.externPopUpsExcesos[posLayer]=null;
		}
		if (this.externPopUpsParadas[posLayer]!=null){
			this.externPopUpsParadas[posLayer].close();
			this.externPopUpsParadas[posLayer]=null;
		}
	},

	cancelDrawHistoricoPolyLine: function(){
		this.habilitarSelectorHistorico();
		this.cancelDrawHistoricoRecorrido = true;
	},

	/*FUNCIONES PARA VISUALIZAR LOS EVENTOS DEL REPORTE DE HISTORICOS DE RECORRIDO EN EL MAPA*/
	drawEventoFromReport: function(point, tipo, getInfoFunc) {
	   var mapaId = this.mapaId;
	   if (this.layerMarkersHistoricoRPT == null) {
		    this.layerMarkersHistoricoRPT = new OpenLayers.Layer.Markers("");
		    cMapController.getMapById(mapaId).getMap().addLayer(this.layerMarkersHistoricoRPT);
		    var zIndex = 902;
			if (VEH_SIMPLEVIEW==1){
				zIndex = 902;
			}
	       	this.layerMarkersHistoricoRPT.div.style.zIndex = zIndex;
	    }
		var icono = null;
		switch (parseInt(tipo)){
			case 0: icono = (mapIcons.getHistoricoIcon('inicio')); break;
			case 1: icono = (mapIcons.getHistoricoIcon('fin')); break;
			case 2: icono = (mapIcons.getHistoricoIcon('evento')); break;
			case 3: icono = (mapIcons.getHistoricoIcon('exceso')); break;
			case 4: icono = (mapIcons.getHistoricoIcon('parada')); break;
			default: icono = (mapIcons.getHistoricoIcon('inicio'));
		}
		
		var marker = new OpenLayers.Marker(point, icono);
		var mapaId = cMapController.getMapActive().getId();
		marker.events.register("click", marker, function() {
			cMapController.getMapById(mapaId).openInfoEvento(point, getInfoFunc());
        	});
		
		this.layerMarkersHistoricoRPT.addMarker(marker);
	},

	clearEventoReporteRecorrido: function(){
		if (this.layerMarkersHistoricoRPT!=null){
			cMapController.getMapActive().getMap().removeLayer(this.layerMarkersHistoricoRPT);
			this.layerMarkersHistoricoRPT.destroy();
			this.layerMarkersHistoricoRPT = null;
			this.posimovilHistoricoRPT = new Array();
		}
	},

	SubmitHistoricoUltimaHora: function() {
		if(esMoviloFijo() == "FIJOS"){
    		alert("Seleccione una cuenta 'Movil' para mapear un recorrido");
    		return false;
    	}
		this.deshabilitarSelectorHistorico();
		dejarDeSeguir();
		pxDistance = 0;
		this.contadorEventos 	= 0;
		this.contadorExcesos 	= 0;
		this.contadorParadas 	= 0;
		this.hist_est_velSUMA 	= 0;
		this.hist_est_velCANT 	= 0;
		this.hist_est_velMAX 	= 0;
		this.hist_est_disTOT	= 0;
		this.lastHistoricoID	= this.layersHistoricoRecorrido.length;
		initEventos();
		initExcesos();
		initParadas();
		historicoFeatureBounds	= new OpenLayers.Bounds();
		this.layerHistoricoRecorridoCreate 	= false;
		this.layerHistoricoMarkersCreate 	= false;
		this.cancelDrawHistoricoRecorrido 	= false;
		this.historicoLastPoint = null;
		this.infoPoints[this.lastHistoricoID+1]=new Array();
		this.cuentaRecorrido = $j('#cuentaSelectHistorico').val();
		mapaImprimiendoRecorrido = this.mapaId;
		countHistoricoLotes		= 1;
		hideDiv('historcoMenuPPAL');
		showDiv('div_drawHistoricoRecorrido');
		this.callHistoricoRecorridoUltHora(0);
	},
	SubmitHistorico: function() {
//		var dateIni = document.getElementById('mesi').value;
//		dateIni += "/" + document.getElementById('diai').value;
//		dateIni += "/" + document.getElementById('anoi').value;
//		dateIni += " " + document.getElementById('horaInicio').value;
//		var dateFin = document.getElementById('mesf').value;
//		dateFin += "/" + document.getElementById('diaf').value;
//		dateFin += "/" + document.getElementById('anof').value;
//		dateFin += " " + document.getElementById('horaFin').value;
		if(!esFechaValida($j("#fechaInicio"),true,$j("#errorFechaIniRecorrido"))){//funcion es utils.js
			return false;
		}
		if(!esFechaValida($j("#fechaFin"),true,$j("#errorFechaFinRecorrido"))){//funcion es utils.js
			return false;
		}
		this.deshabilitarSelectorHistorico();
        var dateIni = getObjectDATE($j("#fechaInicio"),"i","");//funcion es utils.js
        var dateFin = getObjectDATE($j("#fechaFin"),"f","");//funcion es utils.js
        
		var time1 = dateIni.getTime();
		var time2 = dateFin.getTime();
		var difHour = (time2 - time1)/Date.HOUR;
		
		mapaImprimiendoRecorrido = this.mapaId;
    	if (difHour < this.maximoHorasMapeo){
			dejarDeSeguir();
			pxDistance = 0;
			this.contadorEventos = 0;
			this.contadorExcesos = 0;
			this.contadorParadas = 0;
			this.hist_est_velSUMA = 0;
			this.hist_est_velCANT = 0;
			this.hist_est_velMAX = 0;
			this.hist_est_disTOT = 0;
			this.lastHistoricoID = this.layersHistoricoRecorrido.length;
			initEventos();
			initExcesos();
			initParadas();
			historicoFeatureBounds = new OpenLayers.Bounds();
			this.layerHistoricoRecorridoCreate = false;
			this.layerHistoricoMarkersCreate = false;
			this.cancelDrawHistoricoRecorrido = false;
			this.historicoLastPoint = null;
			this.infoPoints[this.lastHistoricoID+1]=new Array();
			this.cuentaRecorrido = $j('#cuentaSelectHistorico').val();
			countHistoricoLotes = 1;
			hideDiv('div_filtroHistorico');
			showDiv('div_drawHistoricoRecorrido');
			this.callHistoricoRecorrido(0);
		}else{
	    	alert("Este reporte no puede realizarse para un rango de tiempos que superen las " + this.maximoHorasMapeo + " horas");
		}
    },

    ocultarHistoricoInfoPoints: function(mapaId,idRec){
    	clickMap5(mapaId);
    	
    	this.bVerInfoPoints[idRec] = false;
    	
    	$j("#histIniVerPuntosA"+idRec+mapaId).html("Ver puntos de recorrido");
    	$j("#histIniVerPuntosB"+idRec+mapaId).html("Ver puntos de recorrido");
    	$j("#histFinVerPuntosA"+idRec+mapaId).html("Ver puntos de recorrido");
    	$j("#histFinVerPuntosB"+idRec+mapaId).html("Ver puntos de recorrido");

    	$j("#histIniVerPuntosA"+idRec+mapaId).unbind('click');
    	$j("#histIniVerPuntosB"+idRec+mapaId).unbind('click');
    	$j("#histFinVerPuntosA"+idRec+mapaId).unbind('click');
    	$j("#histFinVerPuntosB"+idRec+mapaId).unbind('click');
    	var newclick = new Function("cMapController.getMapById("+mapaId+").getHistorico().drawHistoricoInfoPoints("+mapaId+","+idRec+")");
    	$j("#histIniVerPuntosA"+idRec+mapaId).attr('onclick', '').click(newclick);
    	$j("#histIniVerPuntosB"+idRec+mapaId).attr('onclick', '').click(newclick);
    	$j("#histFinVerPuntosA"+idRec+mapaId).attr('onclick', '').click(newclick);
    	$j("#histFinVerPuntosB"+idRec+mapaId).attr('onclick', '').click(newclick);
    	var oLayer = this.layersHistoricoRecorridoInfoPoints[idRec];
    	if(oLayer!=null){
    		cMapController.getMapById(mapaId).getMap().removeLayer(oLayer);
    		oLayer.destroy();
			//this.layersHistoricoRecorridoInfoPoints.splice(idRec,1);
    		this.layersHistoricoRecorridoInfoPoints[idRec] = null;
    	}
    },
    
    drawHistoricoInfoPoints: function(mapaId,idRec){
    	clickMap5(mapaId);
    	var arrayPoints =  cMapController.getMapById(mapaId).getHistorico().getInfoPoints(idRec);
    	$j("#histIniVerPuntosA"+idRec+mapaId).html("Ocultar puntos de recorrido");
    	$j("#histIniVerPuntosB"+idRec+mapaId).html("Ocultar puntos de recorrido");
    	$j("#histFinVerPuntosA"+idRec+mapaId).html("Ocultar puntos de recorrido");
    	$j("#histFinVerPuntosB"+idRec+mapaId).html("Ocultar puntos de recorrido");

    	$j("#histIniVerPuntosA"+idRec+mapaId).unbind('click');
    	$j("#histIniVerPuntosB"+idRec+mapaId).unbind('click');
    	$j("#histFinVerPuntosA"+idRec+mapaId).unbind('click');
    	$j("#histFinVerPuntosB"+idRec+mapaId).unbind('click');
    	var newclick = new Function("cMapController.getMapById("+mapaId+").getHistorico().ocultarHistoricoInfoPoints("+mapaId+","+idRec+")");
    	$j("#histIniVerPuntosA"+idRec+mapaId).attr('onclick', '').click(newclick);
    	$j("#histIniVerPuntosB"+idRec+mapaId).attr('onclick', '').click(newclick);
    	$j("#histFinVerPuntosA"+idRec+mapaId).attr('onclick', '').click(newclick);
    	$j("#histFinVerPuntosB"+idRec+mapaId).attr('onclick', '').click(newclick);
    	
    	this.bVerInfoPoints[idRec] = true;
    	
    	if(this.layersHistoricoRecorridoInfoPoints[idRec] == null || this.layersHistoricoRecorridoInfoPoints[idRec] == undefined ){
    		this.layersHistoricoRecorridoInfoPoints[idRec] = new OpenLayers.Layer.Markers("infoPoints"+idRec);
    		cMapController.getMapById(mapaId).getMap().addLayer(this.layersHistoricoRecorridoInfoPoints[idRec]);
    	}
    	var imprimoPunto 	= true;
    	var dist = 0;
    	if(arrayPoints.length>0){
    		for (var i=1; i<arrayPoints.length-1; i++) {
    			var point = arrayPoints[i];
    			var point2 = arrayPoints[i+1];
    			
    			if(imprimoPunto){
    				var LonLatInfo = new OpenLayers.LonLat(point.longitud, point.latitud).transform(cMapController.getMapById(mapaId).getDisplayProjection(), cMapController.getMapById(mapaId).getProjection());
    				if(LonLatInfo) {
    					// vertice marker icons
    					var size 		= new OpenLayers.Size(11,11);
    					var offset 		= new OpenLayers.Pixel(-(size.w/2), -(size.h));
    					var icon 		= new OpenLayers.Icon('images/vertice.png', size, offset);
    					var html 		= this.getInfoRecorridoHistoricoInfoPoints(idRec,point,"recorrido historico");
    					
    					var markerVertice = new OpenLayers.Marker(LonLatInfo,icon, html);
    					
    					markerVertice.events.register('click', markerVertice, function(evt){
    						cMapController.getMapById(mapaId).openInfoEvento(this.lonlat,this.aux );
    					});
    					markerVertice.events.register('mouseover', markerVertice, function(evt) {
    						this.setUrl('images/verticeHover.png');
    					});
    					markerVertice.events.register('mouseout', markerVertice, function(evt) {
    						this.setUrl('images/vertice.png');
    					});
    					this.layersHistoricoRecorridoInfoPoints[idRec].addMarker(markerVertice);
    				}
    			}
	    		  
    			var lat1	= point.latitud;
    			var lon1	= point.longitud;
    			var lat2	= point2.latitud;
    			var lon2	= point2.longitud;
    			dist 	+= distanciaEntrePuntos(lat1, lon1, lat2, lon2)*1000;
    			var sentido		= point.sentidoPalabra;
    			var sentido2	= point2.sentidoPalabra;
    			imprimoPunto = false;
    			if(DISTANCIA_ENTRE_PUNTOS<=dist || sentido!=sentido2){
    				imprimoPunto = true;
    				dist = 0;
    			}
    			this.layersHistoricoRecorridoInfoPoints[idRec].div.style.zIndex = 902;
    		}
    	}
    },
    
	callHistoricoRecorridoUltHora: function(fromRecord){
		this.bUltimaHoraReporte = true;
		var actualDate = new Date();
		var time = actualDate.getTime();
		actualDate2 = new Date(time);
		time -= Date.HOUR;
		actualDate = new Date(time);
		$j("#iconoMapa").removeClass().addClass("icono_mapa_activo");
		autoRefreshFlag = 1;
		
		var reqParamsHistorico = "COMMAND=HISTORICO2";
		reqParamsHistorico += "&CUENTA=" + this.cuentaRecorrido;
		reqParamsHistorico += "&diai=" + actualDate.print("%d");
		reqParamsHistorico += "&mesi=" + actualDate.print("%m");
		reqParamsHistorico += "&anoi=" + actualDate.print("%Y");
		reqParamsHistorico += "&diaf=" + actualDate.print("%d");
		reqParamsHistorico += "&mesf=" + actualDate.print("%m");
		reqParamsHistorico += "&anof=" + actualDate.print("%Y");
		reqParamsHistorico += "&horaInicio="+ actualDate.print("%H:%M");
		reqParamsHistorico += "&horaFin=" 	+ actualDate2.print("%H:%M");
		reqParamsHistorico += "&filtrarCeros=false";
		reqParamsHistorico += "&DDERECORD=" + fromRecord;
		reqParamsHistorico += "&ULTHORA=1";
		reqParamsHistorico += "&LIMIT=" 	+ (parseInt(this.historicoLimitXlote) + 1).toString(); //siempre traigo 1 mas que el limite para controlar existencia de otro lote de registros...
		
		var mapaId = this.mapaId;
		$j.ajax({
		      type: "POST",
		      url: "querycontroller.php",
		      data: reqParamsHistorico,
		      beforeSend: function(){
				//$j('#LoaderAjax').show();
		      },
		      success: function(data) {
		    	//$j('#LoaderAjax').hide();
		    	if(data.trim()!=""){
			        var resultsHistorico =	jQuery.parseJSON(data);
			        var reproductor = "reproductor";
			        var id		= "id";
			        if (resultsHistorico.length != 'undefined') {
			        	//var mapaId 	= mapaImprimiendoRecorrido;
			    			if (resultsHistorico.length != 'undefined') {
			    				if (resultsHistorico.length>0) {
			    					if(mapaId==cMapController.getMapActive().getId()){
			    						hideDiv('historcoMenuPPAL');
			    						showDiv('div_drawHistoricoRecorrido');
			    					}
			    					//armo array de objetos LonLat.
			    					var lotePoints 	= new Array();
			    					//DRAW HISTORICO
			    					if (cMapController.getMapById(mapaId).getHistorico().getHistoricoLastPoint() != null) //agrego como punto inicial el ultimo punto del segmento anterior...
			    						lotePoints.push(cMapController.getMapById(mapaId).getHistorico().getHistoricoLastPoint());
			    					var ini = 0;
			    					var lim = 1;
			    					if(countHistoricoLotes==1){
			    						lim = 2;
			    					}
			    					if(cMapController.getMapById(mapaId).getHistorico().getFlagReporteUltHora() && countHistoricoLotes==1){
			    						ini = 1;
			    						lim = 2;
			    					}
			    					var posi = cMapController.getMapById(mapaId).getHistorico().getLastHistoricoID()+1;//para guardar los puntos en una posicion del array, empieza en 1
			    					for (var i=ini; i<resultsHistorico.length-lim; i++){
			    						if (parseInt(resultsHistorico[i].edadMensaje) < 255) {
			    							var point = new OpenLayers.Geometry.Point(resultsHistorico[i].longitud, resultsHistorico[i].latitud).transform(cMapController.getMapById(mapaId).getDisplayProjection(), cMapController.getMapById(mapaId).getProjection());
			    							//cMapController.getMapById(mapaId).getHistorico().getHistoricoFeatureBounds().extend(point);
			    							historicoFeatureBounds.extend(point);
			    							lotePoints.push(point);
			    							
			    							cMapController.getMapById(mapaId).getHistorico().getInfoPoints(posi).push(resultsHistorico[i]);
			    						}
			    						procesarEvento(resultsHistorico[i],mapaId);
			    						procesarExceso(resultsHistorico[i]);
			    						procesarParada(resultsHistorico[i], false);
			    						//calculos estadisticos de velocidad maxima y velocidad promedio...
			    						if ((parseFloat(resultsHistorico[i].velocidad)>0)&&(parseInt(resultsHistorico[i].edadMensaje) < 255)){
			    							cMapController.getMapById(mapaId).getHistorico().setHistoricoEstVelocidadSum(cMapController.getMapById(mapaId).getHistorico().getHistoricoEstVelocidadSuma() + parseFloat(resultsHistorico[i].velocidad));
			    							cMapController.getMapById(mapaId).getHistorico().setHistoricoEstVelocidadCant(cMapController.getMapById(mapaId).getHistorico().getHistoricoEstVelocidadCant() + 1) ;
			    							if (parseFloat(resultsHistorico[i].velocidad)>cMapController.getMapById(mapaId).getHistorico().getHistoricoEstVelocidadMax())
			    								cMapController.getMapById(mapaId).getHistorico().setHistoricoEstVelocidadMax(parseFloat(resultsHistorico[i].velocidad));
			    						}
			    					}
			    					if(i <	cMapController.getMapById(mapaId).getHistorico().getHistoricoLimitXlote()){ //es el ultimo punto del recorrido
			    						procesarEvento(resultsHistorico[i],mapaId);
			    						procesarExceso(resultsHistorico[i]);
			    						procesarParada(resultsHistorico[i], true);
			    						var point 		= new OpenLayers.Geometry.Point(resultsHistorico[i].longitud, resultsHistorico[i].latitud).transform(cMapController.getMapById(mapaId).getDisplayProjection(), 	cMapController.getMapById(mapaId).getProjection());
			    						lotePoints.push(point);
			    						cMapController.getMapById(mapaId).getHistorico().getInfoPoints(posi).push(resultsHistorico[i]);
			    						//cMapController.getMapById(mapaId).getHistorico().getHistoricoFeatureBounds().extend(point);
			    						historicoFeatureBounds.extend(point);
			    						//calculos estadisticos de velocidad maxima y velocidad promedio para el ultimo punto
			    						if ((parseFloat(resultsHistorico[i].velocidad)>0)&&(parseInt(resultsHistorico[i].edadMensaje) < 255)){
			    							cMapController.getMapById(mapaId).getHistorico().setHistoricoEstVelocidadSum(cMapController.getMapById(mapaId).getHistorico().getHistoricoEstVelocidadSuma() + parseFloat(resultsHistorico[i].velocidad) );
			    							cMapController.getMapById(mapaId).getHistorico().setHistoricoEstVelocidadCant(cMapController.getMapById(mapaId).getHistorico().getHistoricoEstVelocidadCant()+1);
			    							if (parseFloat(resultsHistorico[i].velocidad)> cMapController.getMapById(mapaId).getHistorico().getHistoricoEstVelocidadMax())
			    								cMapController.getMapById(mapaId).getHistorico().setHistoricoEstVelocidadMax(parseFloat(resultsHistorico[i].velocidad));
			    						}
			    					}
			    					cMapController.getMapById(mapaId).getHistorico().setHistoricoLastPoint(lotePoints[lotePoints.length-1]);
			    					cMapController.getMapById(mapaId).getHistorico().drawHistoricoPolyLine(lotePoints,mapaId);
			    					if(countHistoricoLotes==1){ //Es el comienzo del recorrido
			    						// 1 Creo e imprimo la Marker de inicio de recorrido.
			    						var LonLatInicio = new OpenLayers.LonLat(resultsHistorico[1].longitud, resultsHistorico[1].latitud).transform(cMapController.getMapById(mapaId).getDisplayProjection(), 	cMapController.getMapById(mapaId).getProjection());
			    						cMapController.getMapById(mapaId).getHistorico().getPosimovilHistoricoMatrix()[cMapController.getMapById(mapaId).getHistorico().getLastHistoricoID()][1] = resultsHistorico[1];
			    						var ultHistId = cMapController.getMapById(mapaId).getHistorico().getLastHistoricoID();
			    						var resIniHist 	= resultsHistorico[1];
			    						
			    						var functionPopUpInicio = function(){
			    							clickMap5(mapaId);
			    							return cMapController.getMapById(mapaId).getHistorico().getInfoRecorridoHistoricoINI(ultHistId, resIniHist);
			    						};
			    						cMapController.getMapById(mapaId).getHistorico().drawHistoricoMarker(mapaId,LonLatInicio, 0, functionPopUpInicio);
			    						//si es reporte de ultima hora tomo la hora del resultado de la consulta (hora servidor)
			    						if(cMapController.getMapById(mapaId).getHistorico().getFlagReporteUltHora()){
			    							$j('#submitHistoReporte').unbind('click');//elimino la funcion onclick
			    							var myDateIni 	= new MyDate(resultsHistorico[0].fechaIni+':00');
			    							var myDateFin 	= new MyDate(resultsHistorico[0].fechaFin+':00');
			    							var newclick = new Function("SubmitHistoricoReporte(true,'"+resultsHistorico[0].fechaIni+"','"+resultsHistorico[0].fechaFin+"');");
			    							$j("#submitHistoReporte").attr('onclick', '').click(newclick);//asigno nueva funcion onclick
			    							document.getElementById('historico_fechaDesde').innerHTML	= myDateIni.elegantFormat();
			    							document.getElementById('historico_fechaHasta').innerHTML 	= myDateFin.elegantFormat();
			    						}
			    						var velProm 		= resultsHistorico[0].velocidadPromedio;
			    						var velMax 			= resultsHistorico[0].velocidadMaxima;
			    						var disRecString	= resultsHistorico[0].distanciaTotal;
			    						cMapController.getMapById(mapaId).getHistorico().getPosimovilHistoricoMatrix()[cMapController.getMapById(mapaId).getHistorico().getLastHistoricoID()][0].velPromedio 	= velProm;
			    						cMapController.getMapById(mapaId).getHistorico().getPosimovilHistoricoMatrix()[cMapController.getMapById(mapaId).getHistorico().getLastHistoricoID()][0].velMaxima 		= velMax;
			    						cMapController.getMapById(mapaId).getHistorico().getPosimovilHistoricoMatrix()[cMapController.getMapById(mapaId).getHistorico().getLastHistoricoID()][0].recorridoTotal = disRecString;
			    					}
			    					if (i == cMapController.getMapById(mapaId).getHistorico().getHistoricoLimitXlote()){//queda al menos un lote mas
			    						if (cMapController.getMapById(mapaId).getHistorico().getCancelDrawHistoricoRecorrido()){ //borro el ultimo recorrido que se esta creando pq el usuario solicito cancelar.
			    							cMapController.getMapById(mapaId).getHistorico().clearLayerHistoricoRecorrido();
			    							if(mapaId==cMapController.getMapActive().getId()){
			    								hideDiv('div_drawHistoricoRecorrido');
			    								showDiv('div_filtroHistorico');
			    							}
			    						}else{
			    							if(cMapController.getMapById(mapaId).getHistorico().getFlagReporteUltHora()){
			    								cMapController.getMapById(mapaId).getHistorico().callHistoricoRecorridoUltHora(cMapController.getMapById(mapaId).getHistorico().getHistoricoLimitXlote() * countHistoricoLotes);
			    							}else{
			    								cMapController.getMapById(mapaId).getHistorico().callHistoricoRecorrido(cMapController.getMapById(mapaId).getHistorico().getHistoricoLimitXlote() * countHistoricoLotes);
			    							}
			    							countHistoricoLotes++;
			    						}
			    					}else{ //ES EL FIN DEL RECORRIDO
			    						// 2 Creo e imprimo la Marker de fin de recorrido.
			    						cMapController.getMapById(mapaId).getHistorico().getPosimovilHistoricoMatrix()[cMapController.getMapById(mapaId).getHistorico().getLastHistoricoID()][2] = resultsHistorico[i];
			    						var ultHistId 	= cMapController.getMapById(mapaId).getHistorico().getLastHistoricoID();
			    						var resFinHist 	= resultsHistorico[i];
			    						var functionPopUpFin = function(){
			    							clickMap5(mapaId);
			    							return cMapController.getMapById(mapaId).getHistorico().getInfoRecorridoHistoricoFIN(ultHistId, resFinHist);
			    							};
			    						cMapController.getMapById(mapaId).getHistorico().drawHistoricoMarker(mapaId,new OpenLayers.LonLat(cMapController.getMapById(mapaId).getHistorico().getHistoricoLastPoint().x, cMapController.getMapById(mapaId).getHistorico().getHistoricoLastPoint().y), 1, functionPopUpFin);
			    						// 3 Centro y zoom al recorrido.
			    						cMapController.getMapById(mapaId).centrarEnBounds(historicoFeatureBounds);
			    						// 4 Genero y muestro el panel de resultado historico.
			    						cMapController.getMapById(mapaId).getHistorico().finEventos();
			    						cMapController.getMapById(mapaId).getHistorico().finExcesos();
			    						cMapController.getMapById(mapaId).getHistorico().finParadas();
			    						document.getElementById('historico_movil').innerHTML 				= misVehiculosHash.get(cMapController.getMapById(mapaId).getHistorico().getPosimovilHistoricoMatrix()[cMapController.getMapById(mapaId).getHistorico().getLastHistoricoID()][0].idMovil).label;
			    						document.getElementById('historico_velPromedio').innerHTML 			= cMapController.getMapById(mapaId).getHistorico().getPosimovilHistoricoMatrix()[cMapController.getMapById(mapaId).getHistorico().getLastHistoricoID()][0].velPromedio+" km/h";
			    						document.getElementById('historico_velMaxima').innerHTML 			= cMapController.getMapById(mapaId).getHistorico().getPosimovilHistoricoMatrix()[cMapController.getMapById(mapaId).getHistorico().getLastHistoricoID()][0].velMaxima+" km/h";
			    						document.getElementById('historico_distanciaRecorrida').innerHTML 	= cMapController.getMapById(mapaId).getHistorico().getPosimovilHistoricoMatrix()[cMapController.getMapById(mapaId).getHistorico().getLastHistoricoID()][0].recorridoTotal;
			    						
			    						if(!cMapController.getMapById(mapaId).getHistorico().getFlagReporteUltHora()){
			    							$j('#submitHistoReporte').unbind('click');
			    							var myDateIni 	= new MyDate(document.getElementById('fechaInicio').value+':00');
			    							var myDateFin	= new MyDate(document.getElementById('fechaFin').value+':00');
			    							var newclick = new Function("SubmitHistoricoReporte();");
			    							$j("#submitHistoReporte").attr('onclick', '').click(newclick);
			    							document.getElementById('historico_fechaDesde').innerHTML	= myDateIni.elegantFormat();
			    							document.getElementById('historico_fechaHasta').innerHTML 	= myDateFin.elegantFormat();
			    						}
			    						if(mapaId==cMapController.getMapActive().getId()){
			    							hideDiv('div_drawHistoricoRecorrido');
			    							showDiv('div_resultadoHistorico');
			    						}
			    						var auxId = ultHistId+1;	
			    						cMapController.getMapById(mapaId).getHistorico().setRecorridoActivo(auxId);
			    						$j("#nroRecorrido").html("n&deg;: "+auxId);
			    						var htmlResult = $j("#div_resultadoHistorico").html();
			    						cMapController.getMapById(mapaId).getHistorico().setResultadoHistoricoRecorrido(ultHistId, htmlResult);
			    						
			    					}
			    				}else{
			    					cMapController.getMapById(mapaId).getHistorico().habilitarSelectorHistorico();
			    					if(mapaId==cMapController.getMapActive().getId()){
			    						showDiv('div_filtroHistorico');
			    						hideDiv('div_drawHistoricoRecorrido');
			    					}
			    					alert('No hubo resultados para la busqueda realizada.');
			    				}
			    			}else{
			    				cMapController.getMapById(mapaId).getHistorico().habilitarSelectorHistorico();
			    			}
			    			$j("#iconoMapa").removeClass().addClass("icono_mapa");
			    			autoRefreshFlag = 0;
			        }
		    	}
		      }
		});
	},

	callHistoricoRecorrido: function(fromRecord){
		this.bUltimaHoraReporte = false;
		autoRefreshFlag = 1;
		var reqParamsHistorico = "COMMAND=HISTORICO2";
    	reqParamsHistorico += "&CUENTA=" +this.cuentaRecorrido;
    	reqParamsHistorico += "&diai=" + document.getElementById('diai').value;
    	reqParamsHistorico += "&mesi=" + document.getElementById('mesi').value;
    	reqParamsHistorico += "&anoi=" + document.getElementById('anoi').value;
    	reqParamsHistorico += "&diaf=" + document.getElementById('diaf').value;
    	reqParamsHistorico += "&mesf=" + document.getElementById('mesf').value;
    	reqParamsHistorico += "&anof=" + document.getElementById('anof').value;
    	reqParamsHistorico += "&horaInicio=" + document.getElementById('horaInicio').value;
    	reqParamsHistorico += "&horaFin=" + document.getElementById('horaFin').value;
    	reqParamsHistorico += "&filtrarCeros=" + document.getElementById('filtrarCeros').value;
		reqParamsHistorico += "&DDERECORD=" + fromRecord;
		reqParamsHistorico += "&LIMIT=" + (parseInt(this.historicoLimitXlote) + 1).toString(); //siempre traigo 1 mas que el limite para controlar existencia de otro lote de registros...
    	$j("#iconoMapa").removeClass().addClass("icono_mapa_activo");
    	
//    	if (msie)
//            reqHandlerHistorico = new ActiveXObject("Microsoft.XMLHTTP");
//        else
//            reqHandlerHistorico = new XMLHttpRequest();
//        reqHandlerHistorico.onreadystatechange = this.OnReadyStateChangeHistorico;
//        reqHandlerHistorico.open("POST", "querycontroller.php", true);
//        reqHandlerHistorico.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
//		reqHandlerHistorico.send(reqParamsHistorico);
		var mapaId = this.mapaId;
		$j.ajax({
		      type: "POST",
		      url: "querycontroller.php",
		      data: reqParamsHistorico,
		      beforeSend: function(){
				//$j('#LoaderAjax').show();
		      },
		      success: function(data) {
		    	//$j('#LoaderAjax').hide();
		    	if(data.trim()!=""){
			        var resultsHistorico =	jQuery.parseJSON(data);
			        var reproductor = "reproductor";
			        var id		= "id";
			        if (resultsHistorico.length != 'undefined') {
			        	//var mapaId 	= mapaImprimiendoRecorrido;
			    			if (resultsHistorico.length != 'undefined') {
			    				if (resultsHistorico.length>0) {
			    					if(mapaId==cMapController.getMapActive().getId()){
			    						hideDiv('historcoMenuPPAL');
			    						showDiv('div_drawHistoricoRecorrido');
			    					}
			    					//armo array de objetos LonLat.
			    					var lotePoints 	= new Array();
			    					//DRAW HISTORICO
			    					if (cMapController.getMapById(mapaId).getHistorico().getHistoricoLastPoint() != null) //agrego como punto inicial el ultimo punto del segmento anterior...
			    						lotePoints.push(cMapController.getMapById(mapaId).getHistorico().getHistoricoLastPoint());
			    					var ini = 0;
			    					var lim = 1;
			    					if(countHistoricoLotes==1){
			    						lim = 2;
			    					}
			    					if(cMapController.getMapById(mapaId).getHistorico().getFlagReporteUltHora() && countHistoricoLotes==1){
			    						ini = 1;
			    						lim = 2;
			    					}
			    					var posi = cMapController.getMapById(mapaId).getHistorico().getLastHistoricoID()+1;//para guardar los puntos en una posicion del array, empieza en 1
			    					for (var i=ini; i<resultsHistorico.length-lim; i++){
			    						if (parseInt(resultsHistorico[i].edadMensaje) < 255) {
			    							var point = new OpenLayers.Geometry.Point(resultsHistorico[i].longitud, resultsHistorico[i].latitud).transform(cMapController.getMapById(mapaId).getDisplayProjection(), cMapController.getMapById(mapaId).getProjection());
			    							//cMapController.getMapById(mapaId).getHistorico().getHistoricoFeatureBounds().extend(point);
			    							historicoFeatureBounds.extend(point);
			    							lotePoints.push(point);
			    							
			    							cMapController.getMapById(mapaId).getHistorico().getInfoPoints(posi).push(resultsHistorico[i]);
			    						}
			    						procesarEvento(resultsHistorico[i],mapaId);
			    						procesarExceso(resultsHistorico[i]);
			    						procesarParada(resultsHistorico[i], false);
			    						//calculos estadisticos de velocidad maxima y velocidad promedio...
			    						if ((parseFloat(resultsHistorico[i].velocidad)>0)&&(parseInt(resultsHistorico[i].edadMensaje) < 255)){
			    							cMapController.getMapById(mapaId).getHistorico().setHistoricoEstVelocidadSum(cMapController.getMapById(mapaId).getHistorico().getHistoricoEstVelocidadSuma() + parseFloat(resultsHistorico[i].velocidad));
			    							cMapController.getMapById(mapaId).getHistorico().setHistoricoEstVelocidadCant(cMapController.getMapById(mapaId).getHistorico().getHistoricoEstVelocidadCant() + 1) ;
			    							if (parseFloat(resultsHistorico[i].velocidad)>cMapController.getMapById(mapaId).getHistorico().getHistoricoEstVelocidadMax())
			    								cMapController.getMapById(mapaId).getHistorico().setHistoricoEstVelocidadMax(parseFloat(resultsHistorico[i].velocidad));
			    						}
			    					}
			    					if (i <	cMapController.getMapById(mapaId).getHistorico().getHistoricoLimitXlote()){ //es el ultimo punto del recorrido
			    						procesarEvento(resultsHistorico[i],mapaId);
			    						procesarExceso(resultsHistorico[i]);
			    						procesarParada(resultsHistorico[i], true);
			    						var point 		= new OpenLayers.Geometry.Point(resultsHistorico[i].longitud, resultsHistorico[i].latitud).transform(cMapController.getMapById(mapaId).getDisplayProjection(), 	cMapController.getMapById(mapaId).getProjection());
			    						lotePoints.push(point);
			    						cMapController.getMapById(mapaId).getHistorico().getInfoPoints(posi).push(resultsHistorico[i]);
			    						//cMapController.getMapById(mapaId).getHistorico().getHistoricoFeatureBounds().extend(point);
			    						historicoFeatureBounds.extend(point);
			    						//calculos estadisticos de velocidad maxima y velocidad promedio para el ultimo punto
			    						if ((parseFloat(resultsHistorico[i].velocidad)>0)&&(parseInt(resultsHistorico[i].edadMensaje) < 255)){
			    							cMapController.getMapById(mapaId).getHistorico().setHistoricoEstVelocidadSum(cMapController.getMapById(mapaId).getHistorico().getHistoricoEstVelocidadSuma() + parseFloat(resultsHistorico[i].velocidad) );
			    							cMapController.getMapById(mapaId).getHistorico().setHistoricoEstVelocidadCant(cMapController.getMapById(mapaId).getHistorico().getHistoricoEstVelocidadCant()+1);
			    							if (parseFloat(resultsHistorico[i].velocidad)> cMapController.getMapById(mapaId).getHistorico().getHistoricoEstVelocidadMax())
			    								cMapController.getMapById(mapaId).getHistorico().setHistoricoEstVelocidadMax(parseFloat(resultsHistorico[i].velocidad));
			    						}
			    					}
			    					cMapController.getMapById(mapaId).getHistorico().setHistoricoLastPoint(lotePoints[lotePoints.length-1]);
			    					cMapController.getMapById(mapaId).getHistorico().drawHistoricoPolyLine(lotePoints,mapaId);
			    					if(countHistoricoLotes==1){ //Es el comienzo del recorrido
			    						// 1 Creo e imprimo la Marker de inicio de recorrido.
			    						var LonLatInicio = new OpenLayers.LonLat(resultsHistorico[1].longitud, resultsHistorico[1].latitud).transform(cMapController.getMapById(mapaId).getDisplayProjection(), 	cMapController.getMapById(mapaId).getProjection());
			    						cMapController.getMapById(mapaId).getHistorico().getPosimovilHistoricoMatrix()[cMapController.getMapById(mapaId).getHistorico().getLastHistoricoID()][1] = resultsHistorico[1];
			    						var ultHistId = cMapController.getMapById(mapaId).getHistorico().getLastHistoricoID();
			    						var resIniHist 	= resultsHistorico[1];
			    						
			    						var functionPopUpInicio = function(){
			    							clickMap5(mapaId);
			    							return cMapController.getMapById(mapaId).getHistorico().getInfoRecorridoHistoricoINI(ultHistId, resIniHist);
			    						};
			    						cMapController.getMapById(mapaId).getHistorico().drawHistoricoMarker(mapaId,LonLatInicio, 0, functionPopUpInicio);
			    						//si es reporte de ultima hora tomo la hora del resultado de la consulta (hora servidor)
			    						if(cMapController.getMapById(mapaId).getHistorico().getFlagReporteUltHora()){
			    							$j('#submitHistoReporte').unbind('click');//elimino la funcion onclick
			    							var myDateIni 	= new MyDate(resultsHistorico[0].fechaIni+':00');
			    							var myDateFin 	= new MyDate(resultsHistorico[0].fechaFin+':00');
			    							var newclick = new Function("SubmitHistoricoReporte(true,'"+resultsHistorico[0].fechaIni+"','"+resultsHistorico[0].fechaFin+"');");
			    							$j("#submitHistoReporte").attr('onclick', '').click(newclick);//asigno nueva funcion onclick
			    							document.getElementById('historico_fechaDesde').innerHTML	= myDateIni.elegantFormat();
			    							document.getElementById('historico_fechaHasta').innerHTML 	= myDateFin.elegantFormat();
			    						}
			    						var velProm 		= resultsHistorico[0].velocidadPromedio;
			    						var velMax 			= resultsHistorico[0].velocidadMaxima;
			    						var disRecString	= resultsHistorico[0].distanciaTotal;
			    						cMapController.getMapById(mapaId).getHistorico().getPosimovilHistoricoMatrix()[cMapController.getMapById(mapaId).getHistorico().getLastHistoricoID()][0].velPromedio = velProm;
			    						cMapController.getMapById(mapaId).getHistorico().getPosimovilHistoricoMatrix()[cMapController.getMapById(mapaId).getHistorico().getLastHistoricoID()][0].velMaxima = velMax;
			    						cMapController.getMapById(mapaId).getHistorico().getPosimovilHistoricoMatrix()[cMapController.getMapById(mapaId).getHistorico().getLastHistoricoID()][0].recorridoTotal = disRecString;
			    					}
			    					if (i == cMapController.getMapById(mapaId).getHistorico().getHistoricoLimitXlote()){//queda al menos un lote mas
			    						if (cMapController.getMapById(mapaId).getHistorico().getCancelDrawHistoricoRecorrido()){ //borro el ultimo recorrido que se esta creando pq el usuario solicito cancelar.
			    							cMapController.getMapById(mapaId).getHistorico().clearLayerHistoricoRecorrido();
			    							if(mapaId==cMapController.getMapActive().getId()){
			    								hideDiv('div_drawHistoricoRecorrido');
			    								showDiv('div_filtroHistorico');
			    							}
			    						}else{
			    							if(cMapController.getMapById(mapaId).getHistorico().getFlagReporteUltHora()){
			    								cMapController.getMapById(mapaId).getHistorico().callHistoricoRecorridoUltHora(cMapController.getMapById(mapaId).getHistorico().getHistoricoLimitXlote() * countHistoricoLotes);
			    							}else{
			    								cMapController.getMapById(mapaId).getHistorico().callHistoricoRecorrido(cMapController.getMapById(mapaId).getHistorico().getHistoricoLimitXlote() * countHistoricoLotes);
			    							}
			    							countHistoricoLotes++;
			    						}
			    					}else{ //ES EL FIN DEL RECORRIDO
			    						// 2 Creo e imprimo la Marker de fin de recorrido.
			    						cMapController.getMapById(mapaId).getHistorico().getPosimovilHistoricoMatrix()[cMapController.getMapById(mapaId).getHistorico().getLastHistoricoID()][2] = resultsHistorico[i];
			    						var ultHistId 	= cMapController.getMapById(mapaId).getHistorico().getLastHistoricoID();
			    						var resFinHist 	= resultsHistorico[i];
			    						var functionPopUpFin = function(){
			    							clickMap5(mapaId);
			    							return cMapController.getMapById(mapaId).getHistorico().getInfoRecorridoHistoricoFIN(ultHistId, resFinHist);
			    							};
			    						cMapController.getMapById(mapaId).getHistorico().drawHistoricoMarker(mapaId,new OpenLayers.LonLat(cMapController.getMapById(mapaId).getHistorico().getHistoricoLastPoint().x, cMapController.getMapById(mapaId).getHistorico().getHistoricoLastPoint().y), 1, functionPopUpFin);
			    						// 3 Centro y zoom al recorrido.
			    						cMapController.getMapById(mapaId).centrarEnBounds(historicoFeatureBounds);
			    						// 4 Genero y muestro el panel de resultado historico.
			    						cMapController.getMapById(mapaId).getHistorico().finEventos();
			    						cMapController.getMapById(mapaId).getHistorico().finExcesos();
			    						cMapController.getMapById(mapaId).getHistorico().finParadas();
			    						document.getElementById('historico_movil').innerHTML 				= misVehiculosHash.get(cMapController.getMapById(mapaId).getHistorico().getPosimovilHistoricoMatrix()[cMapController.getMapById(mapaId).getHistorico().getLastHistoricoID()][0].idMovil).label;
			    						document.getElementById('historico_velPromedio').innerHTML 			= cMapController.getMapById(mapaId).getHistorico().getPosimovilHistoricoMatrix()[cMapController.getMapById(mapaId).getHistorico().getLastHistoricoID()][0].velPromedio+" km/h";
			    						document.getElementById('historico_velMaxima').innerHTML 			= cMapController.getMapById(mapaId).getHistorico().getPosimovilHistoricoMatrix()[cMapController.getMapById(mapaId).getHistorico().getLastHistoricoID()][0].velMaxima+" km/h";
			    						document.getElementById('historico_distanciaRecorrida').innerHTML 	= cMapController.getMapById(mapaId).getHistorico().getPosimovilHistoricoMatrix()[cMapController.getMapById(mapaId).getHistorico().getLastHistoricoID()][0].recorridoTotal;
			    						
			    						if(!cMapController.getMapById(mapaId).getHistorico().getFlagReporteUltHora()){
			    							$j('#submitHistoReporte').unbind('click');
			    							var myDateIni 	= new MyDate(document.getElementById('fechaInicio').value+':00');
			    							var myDateFin	= new MyDate(document.getElementById('fechaFin').value+':00');
			    							var newclick = new Function("SubmitHistoricoReporte();");
			    							$j("#submitHistoReporte").attr('onclick', '').click(newclick);
			    							document.getElementById('historico_fechaDesde').innerHTML	= myDateIni.elegantFormat();
			    							document.getElementById('historico_fechaHasta').innerHTML 	= myDateFin.elegantFormat();
			    						}
			    						if(mapaId==cMapController.getMapActive().getId()){
			    							hideDiv('div_drawHistoricoRecorrido');
			    							showDiv('div_resultadoHistorico');
			    						}
			    						var auxId = ultHistId+1;
			    						cMapController.getMapById(mapaId).getHistorico().setRecorridoActivo(auxId);
			    						$j("#nroRecorrido").html("n&deg;: "+auxId);
			    						var htmlResult = $j("#div_resultadoHistorico").html();
			    						cMapController.getMapById(mapaId).getHistorico().setResultadoHistoricoRecorrido(ultHistId, htmlResult);
			    						
			    					}
			    				}else{
			    					cMapController.getMapById(mapaId).getHistorico().habilitarSelectorHistorico();
			    					if(mapaId==cMapController.getMapActive().getId()){
			    						showDiv('div_filtroHistorico');
			    						hideDiv('div_drawHistoricoRecorrido');
			    					}
			    					alert('No hubo resultados para la busqueda realizada.');
			    				}
			    			}else{
			    				cMapController.getMapById(mapaId).getHistorico().habilitarSelectorHistorico();
			    			}
			    			$j("#iconoMapa").removeClass().addClass("icono_mapa");
			    			autoRefreshFlag = 0;
			        }
		    	}
		      }
		});
	},

	drawHistoricoPolyLine: function(arrayPoints,mapaId){ //recibe un Array de OpenLayer.Geometry.Points
		 if (!cMapController.getMapById(mapaId).getHistorico().getLayerHistoricoRecorridoCreate()){
		  	  var pos = cMapController.getMapById(mapaId).getHistorico().getLastHistoricoID();
		  	  //this.layersHistoricoRecorrido[pos] = new OpenLayers.Layer.Vector("");
		  	  cMapController.getMapById(mapaId).getHistorico().getLayersHistoricoRecorrido()[pos] = new OpenLayers.Layer.Vector("rec_"+pos);
		  	  cMapController.getMapById(mapaId).getHistorico().getLayersHistoricoRecorrido()[pos].id = "RecorridoVector"+pos;
			 // this.posimovilHistoricoMatrix[pos] = new Array();
		  	  cMapController.getMapById(mapaId).getHistorico().getPosimovilHistoricoMatrix()[pos] =  new Array();
		  	  cMapController.getMapById(mapaId).getHistorico().getPosimovilHistoricoMatrix()[pos][0] = new RecorridoHistorico(pos);
			  cMapController.getMapById(mapaId).getHistorico().getPosimovilHistoricoMatrix()[pos][0].idMovil = document.getElementById('cuentaSelectHistorico').value;
			  cMapController.getMapById(mapaId).getHistorico().getPosimovilHistoricoMatrix()[pos][0].fechaDde = document.getElementById('fechaInicio').value;
			  cMapController.getMapById(mapaId).getHistorico().getPosimovilHistoricoMatrix()[pos][0].fechaHta = document.getElementById('fechaFin').value;
			  cMapController.getMapById(mapaId).getHistorico().getPosimovilHistoricoMatrix()[pos][1] = 'inicio';
			  cMapController.getMapById(mapaId).getHistorico().getPosimovilHistoricoMatrix()[pos][2] = 'fin';
			  cMapController.getMapById(mapaId).getMap().addLayer(cMapController.getMapById(mapaId).getHistorico().getLayersHistoricoRecorrido()[pos]);
			  cMapController.getMapById(mapaId).getHistorico().getLayersHistoricoRecorrido()[pos].div.style.zIndex = 600;
			  cMapController.getMapById(mapaId).getHistorico().setLayerHistoricoRecorridoCreate(true);
			  cMapController.getMapById(mapaId).getHistorico().setColor(document.getElementById('colorId').value.toUpperCase());
			  cMapController.getMapById(mapaId).getHistorico().setAncho(document.getElementById('thickness').value);
			  
		  }
		  var lineString = new OpenLayers.Geometry.LineString(arrayPoints);
		  var color = cMapController.getMapById(mapaId).getHistorico().getColor();
		  var ancho = cMapController.getMapById(mapaId).getHistorico().getAncho();
		  var feature = new OpenLayers.Feature.Vector(lineString, null,{
	            strokeColor: '#'+color,
	            strokeWidth: ancho,
				strokeOpacity: 0.5
		        });
		  if(cMapController.getMapById(mapaId).getHistorico().getLayersHistoricoRecorrido().length > 0){
			  cMapController.getMapById(mapaId).getHistorico().getLayersHistoricoRecorrido()[cMapController.getMapById(mapaId).getHistorico().getLayersHistoricoRecorrido().length-1].addFeatures(feature);
		  }else{
			  cMapController.getMapById(mapaId).getHistorico().getLayersHistoricoRecorrido()[cMapController.getMapById(mapaId).getHistorico().getLayersHistoricoRecorrido()].addFeatures(feature);
		  }
		  //calculo de la distancia recorrida (para estadisticas)
		  for (var i=1; i < arrayPoints.length; i++) {
		  	/*Por curvatura nuestra*/
			  historicoESTDISTOT = cMapController.getMapById(mapaId).getHistorico().getHistoricoEstDistTot();
			  historicoESTDISTOT += distanciaEntrePuntos(arrayPoints[i-1].clone().transform(cMapController.getMapById(mapaId).getProjection(),cMapController.getMapById(mapaId).getDisplayProjection()).y,
		  						arrayPoints[i-1].clone().transform(cMapController.getMapById(mapaId).getProjection(),cMapController.getMapById(mapaId).getDisplayProjection()).x,
		  						arrayPoints[i].clone().transform(cMapController.getMapById(mapaId).getProjection(),cMapController.getMapById(mapaId).getDisplayProjection()).y,
		  						arrayPoints[i].clone().transform(cMapController.getMapById(mapaId).getProjection(),cMapController.getMapById(mapaId).getDisplayProjection()).x);
			 cMapController.getMapById(mapaId).getHistorico().setHistoricoEstDistTotal(historicoESTDISTOT);
		  }
		  //IMPRIMIR SENTIDO DEL RECORRIDO
		  if (document.getElementById('verSentido').checked){
		      drawSentido(arrayPoints);
		  }
	},

	OnReadyStateChangeViewInMapEventoHistoricoDdeReport: function() {
    	var ready = reqHandlerViewPoint.readyState;
		if (ready == READY_STATE_COMPLETE) {
			resultsViewPoint = jQuery.parseJSON(reqHandlerViewPoint.responseText);
			if (resultsViewPoint.length != 'undefined') {
				movilViewPoint = resultsViewPoint[0];
				if (resultsViewPoint.length > 1) {
					var LonLatPoint = new OpenLayers.LonLat(resultsViewPoint[1].longitud,resultsViewPoint[1].latitud).transform(cMapController.getMapActive().getDisplayProjection(), 	cMapController.getMapActive().getProjection());
					var posEvt = cMapController.getMapActive().getHistorico().getPosimovilHistoricoRPT().length;
					cMapController.getMapActive().getHistorico().getPosimovilHistoricoRPT()[posEvt] = resultsViewPoint[1];
					var functionPopUp = function(){
						return (cMapController.getMapActive().getHistorico().getInfoRecorridoHistoricoDdeRPT(posEvt, historicoCUENTApasaje, tempInvalido, tempExceso, tempEvento, tempFuerazona));
					};
					cMapController.getMapActive().getHistorico().drawEventoFromReport(LonLatPoint, 2, functionPopUp);
					cMapController.getMapActive().centrar(resultsViewPoint[1].latitud, resultsViewPoint[1].longitud);
					cMapController.getMapActive().putHighlightCircle(LonLatPoint);
				} else {
					alert('No se encontro el punto seleccionado.');
				}
			} else {
				alert('Ocurrio un problema al realizar la busqueda.');
			}
			$j("#iconoMapa").removeClass().addClass("icono_mapa");
			autoRefreshFlag = 0;
			reqHandlerViewPoint = null;
		}
    },

	ViewInMapEventoHistoricoDdeReport: function (cuenta, historicoId, tabla, invalido, exceso, evento, fuerazona, texto) {
		historicoCUENTApasaje = cuenta;
    	var reqParamsViewPoint = "COMMAND=VIEWPOINT";
    	reqParamsViewPoint += "&CUENTA=" + cuenta;
    	reqParamsViewPoint += "&HISTORICOID=" + historicoId;
    	reqParamsViewPoint += "&SEARCHALFA=1";
    	reqParamsViewPoint += "&TABLA=" + tabla;
    	autoRefreshFlag = 1;
    	$j("#iconoMapa").removeClass().addClass("icono_mapa_activo");
    	if (msie)
            reqHandlerViewPoint = new ActiveXObject("Microsoft.XMLHTTP");
        else
            reqHandlerViewPoint = new XMLHttpRequest();
		tempInvalido=invalido;
		tempExceso=exceso;
		tempEvento=evento;
		tempFuerazona=fuerazona;
		tempTexto=texto;
        reqHandlerViewPoint.onreadystatechange = this.OnReadyStateChangeViewInMapEventoHistoricoDdeReport;
        reqHandlerViewPoint.open("POST", "querycontroller.php", true);
        reqHandlerViewPoint.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        reqHandlerViewPoint.send(reqParamsViewPoint);
    },
    
    ViewInMapParadaHistoricoDdeReport: function(cta, time, fecha, direccion, lat, lon) {
    	var mapaId = this.mapaId;
        var LonLatPoint = new OpenLayers.LonLat(lon, lat).transform(cMapController.getMapById(mapaId).getDisplayProjection(),	cMapController.getMapById(mapaId).getProjection());
        var functionPopUp = function(){
        	return (cMapController.getMapById(mapaId).getHistorico().getInfoParadaHistoricoDdeRPT(cta, time, fecha, direccion, lat, lon));
        	};
        this.drawEventoFromReport(LonLatPoint, 4, functionPopUp);
        cMapController.getMapById(mapaId).centrar(lat, lon);
        cMapController.getMapById(mapaId).putHighlightCircle(LonLatPoint);
    },

   /* initFiltrosGral: function(){
    	if(!this.filtrosSeteados){
	    	if(document.getElementById('fechaInicioHistoricoEventos').value=="" && document.getElementById('fechaFinHistoricoEventos').value==""){
				selector = document.getElementById('cuentaSelectHistoricoEvento');
				var selectorPpal = document.getElementById('cuentaSelectHistorico');
				selector.value = selectorPpal.value;
			}
			if(document.getElementById('fechaInicioHistoricoParadas').value=="" && document.getElementById('fechaFinHistoricoParadas').value==""){
				selector = document.getElementById('cuentaSelectHistoricoParada');
				var selectorPpal = document.getElementById('cuentaSelectHistorico');
				selector.value = selectorPpal.value;
			}
    	}

    	this.filtrosSeteados = true;
	}*/

	//VIAJES...
	showResumenViaje: function(viajeId) {
    	var nombreDiv = 'resumen' + viajeId;
    	var divResumen = document.getElementById(nombreDiv);
        if (divResumen.style.display == 'block') hideDiv(nombreDiv);
    	else showDiv(nombreDiv);

    },

    showReproductorViaje: function(viajeId,resumen) {
    	if (this.simulandoViajeId != '' && this.simulandoViajeId != viajeId) {
    		alert('Ya se esta simulando un viaje. Intente al terminar.');
    		return;
    	}
    	if(this.viajeAnt != viajeId){
    		$j('#reproductor'+this.viajeAnt).css("display","none");
    		$j('#reproductor'+this.viajeAnt).html("");
    	}
    	this.viajeAnt = viajeId;
    	var nombreDiv = 'reproductor' + viajeId;
    	var listadoResumen = "<div class='barra_acordeon' style='border:none; background:none; padding:2px 0 5px;'><ul>" +
        "<li><div style='display:block;'>" +
        	'<strong>Velocidad:</strong>&nbsp;' +
        		'<select style="font-size:11px" id="velocidadViaje' + viajeId + '" title="Indica la velocidad con que se simulara el viaje del movil" onchange="cMapController.getMapActive().getHistorico().cambiarVelocidadSimulacionViaje(this);">' +
					'<option value="3">Lento</option>' +
					'<option value="2" selected="selected">Normal</option>' +
					'<option value="1">R&aacute;pido</option>' +
        		'</select>&nbsp;' +
        	'<div></li>' +
        "<li><a href='javascript:' id='btnPlayViaje" + viajeId + "' onclick='cMapController.getMapActive().getHistorico().simularViaje(" + viajeId + ", \""+ resumen.toString() +"\"); activarDiv(\"reproductor"+viajeId+"\");activarDiv(\"id_"+viajeId+"\");' class='icono simular' title='Comenzar/Reanudar simulaci&oacute;n'></a></li>" +
        '<li class="ultimo"><a href="javascript:" onclick="cMapController.getMapActive().getHistorico().limpiarSimulacionViaje(' + viajeId + ');desactivarDiv(\'reproductor'+viajeId+' \');desactivarDiv(\'id_'+viajeId+' \');" class="icono limpiar2" title="Limpiar simulaci&oacute;n"></a></li>' +
        '</ul></div>';
		var divReproductor = $j("#"+nombreDiv);
		divReproductor.html(listadoResumen);
        if (divReproductor.css("display") == 'block'){
        	hideDiv(nombreDiv);
        }else{
        	showDiv(nombreDiv);
        }

    },
    
    limpiarTodosSimulacionViaje: function() {
    	var vKeys = this.layersSimulacionViajes.keys();
    	for(var i=0; i< vKeys.length; i++){
    		this.limpiarSimulacionViaje(vKeys[i]);
    		desactivarDiv('reproductor'+vKeys[i]+'');
    		var layerViajeArray = this.layersViajes.get(vKeys[i].toString());
    		if (layerViajeArray != null) {
    			desactivarDiv('id_'+vKeys[i]+'');
    		}
    	}
    	this.mostrarBorrarMapeos();
    },
    limpiarSimulacionViaje: function(viajeId) {
    	var layerSimulate = this.layersSimulacionViajes.get(viajeId.toString());
    	if (layerSimulate != null) {
			cMapController.getMapById(this.mapaId).getMap().removeLayer(layerSimulate[0]);
			layerSimulate[0].destroy();
			cMapController.getMapById(this.mapaId).getMap().removeLayer(layerSimulate[1]);
			layerSimulate[1].destroy();
			cMapController.getMapById(this.mapaId).getMap().removeLayer(layerSimulate[2]);
			layerSimulate[2].destroy();
		}
    	this.layersSimulacionViajes.remove(viajeId.toString());
    	
		var nombreBotonPlay = 'btnPlayViaje' + viajeId.toString();
    	var botonPlay = document.getElementById(nombreBotonPlay);
    	if(botonPlay!=null){
    		botonPlay.className = "icono play";
    	}
		this.layerSimulate = null;
		this.simulandoViajeId = "";
		
		var oLayer = this.layersHistoricoViajeInfoPoints[viajeId.toString()];
    	if(oLayer!=null){
    		cMapController.getMapById(this.mapaId).getMap().removeLayer(oLayer);
    		oLayer.destroy();
    		this.layersHistoricoViajeInfoPoints[viajeId.toString()] = null;
    	}
    	this.bVerInfoPointsViajes[viajeId.toString()] = false;
    	
		clearTimeout(this.simulateTimeOut);

    },

    simularLinea: function(viajeId,resumen) {
    	var layerSimulate  = this.layersSimulacionViajes.get(viajeId.toString());
    	
    	var viaje = this.viajesHash.get(viajeId.toString());
    	if (viaje == null) {
    		alert('Viaje no encontrado');
    		return;
    	}
    	if (this.simulacionEnPausa) {
    		this.simulateTimeOut = setTimeout("cMapController.getMapById(" + this.mapaId + ").getHistorico().simularLinea(" + viajeId + ",\"" + resumen+"\");", 1000);
    		return;
    	}
    	var lotePoints 	= new Array();
		var puntos = viaje.vListadoPuntos;
		var point = new OpenLayers.Geometry.Point(puntos[this.lastPosViajeSimulate].longitud, puntos[this.lastPosViajeSimulate].latitud).transform(cMapController.getMapById(this.mapaId).getDisplayProjection(), 	cMapController.getMapById(this.mapaId).getProjection());
		lotePoints.push(point);
		var mapaId = this.mapaId;
		if (this.lastPosViajeSimulate == 0) {
			var bounds = new OpenLayers.Bounds();
			this.infoPointsViajes[viajeId.toString()] = new Array();
			bounds.extend(point);
			if(this.zoomSimulacionViaje){
				cMapController.getMapById(this.mapaId).centrarEnBounds(bounds);
			}
			/*inicio*/
			var latLonInicio = new OpenLayers.LonLat(puntos[0].longitud, puntos[0].latitud).transform(cMapController.getMapById(this.mapaId).getDisplayProjection(), 	cMapController.getMapById(this.mapaId).getProjection());
			var feature = new OpenLayers.Feature(layerSimulate[1], latLonInicio);
			feature.data.icon = mapIcons.getHistoricoIcon('inicio');
			var marker = feature.createMarker();
			marker.events.register("click", feature,  function() {
				cMapController.getMapById(mapaId).openInfoEvento(latLonInicio, cMapController.getMapById(mapaId).getHistorico().getInfoPointsViajeIni(viaje.id,mapaId,viajeId,resumen));
			});
			layerSimulate[1].addMarker(marker);
			this.infoPointsViajes[viajeId.toString()].push(puntos[0]);
		}

		var point = null;
		for (var i=this.lastPosViajeSimulate + 1; i < puntos.length; i++) {
			var a = Math.pow((parseFloat(puntos[this.lastPosViajeSimulate].longitud) - parseFloat(puntos[i].longitud)),2);
		  	var b = Math.pow((parseFloat(puntos[this.lastPosViajeSimulate].latitud) - parseFloat(puntos[i].latitud)),2);
		  	var c = Math.sqrt(a + b) * 100 * 1000; //hipotenusa en metros
		  	this.infoPointsViajes[viajeId.toString()].push(puntos[i]);
			if (c < 100 || (i == this.lastPosViajeSimulate + 1) || (i == puntos.length-2)) {
				point = new OpenLayers.Geometry.Point(puntos[i].longitud, puntos[i].latitud).transform(cMapController.getMapById(this.mapaId).getDisplayProjection(), 	cMapController.getMapById(this.mapaId).getProjection());
				lotePoints.push(point);

			} else {
				//agrego ultimo punto de este trecho
				point = new OpenLayers.Geometry.Point(puntos[i].longitud, puntos[i].latitud).transform(cMapController.getMapById(this.mapaId).getDisplayProjection(), 	cMapController.getMapById(this.mapaId).getProjection());
				lotePoints.push(point);
				//muevo el autito a este punto
				var layerMarkerFin = layerSimulate[2];
				if (layerMarkerFin != null ) { //remuevo el anterior si existia
					cMapController.getMapById(this.mapaId).getMap().removeLayer(layerMarkerFin);
					layerMarkerFin.destroy();
				}
				layerMarkerFin = new OpenLayers.Layer.Markers("");
				cMapController.getMapById(this.mapaId).getMap().addLayer(layerMarkerFin);
				layerMarkerFin.div.style.zIndex = 900;
				var latLonFin = new OpenLayers.LonLat(puntos[i].longitud, puntos[i].latitud).transform(cMapController.getMapById(this.mapaId).getDisplayProjection(), 	cMapController.getMapById(this.mapaId).getProjection());
				var feature = new OpenLayers.Feature(layerMarkerFin, latLonFin);
				feature.data.icon = mapIcons.getHistoricoIcon('fin');
				var marker = feature.createMarker();
				marker.events.register("click", feature,  function() {
					cMapController.getMapById(mapaId).openInfoEvento(latLonFin, cMapController.getMapById(mapaId).getHistorico().getInfoPointsViajeIni(viaje.id,mapaId,viajeId,resumen));
				});
				layerMarkerFin.addMarker(marker);
				layerSimulate[2] = layerMarkerFin;
				//centro en el auto
				cMapController.getMapById(this.mapaId).centrar(puntos[i].latitud, puntos[i].longitud);
				if(this.zoomSimulacionViaje){
					var bounds = new OpenLayers.Bounds();
					bounds.extend(point);
					cMapController.getMapById(this.mapaId).centrarEnBounds(bounds);
				}
				break;
			}
		}

		if ( this.lastPosViajeSimulate == puntos.length - 1) {
    		alert('Fin de simulacion!');
    		this.lastPosViajeSimulate = 0;
    		this.simulandoViajeId = '';
    		this.simulacionEnPausa = false;
    		clearTimeout(this.simulateTimeOut);
    		var nombreBotonPlay = 'btnPlayViaje' + viajeId;
    		var botonPlay = document.getElementById(nombreBotonPlay);
       		botonPlay.className = "icono play";
       		//this.zoomSimulacionViaje = true;
    		return;
    	}

		this.lastPosViajeSimulate = i - 1;
		var feature = this.drawViajePolyLine(lotePoints, '#FF0000');
		layerSimulate[0].addFeatures(feature);

		//nombreVelocidadSelect	= 'velocidadViaje' + viajeId;
    	var velocidadViaje	= this.velocidadSimulacionViaje;
		this.simulateTimeOut= setTimeout("cMapController.getMapById(" + this.mapaId + ").getHistorico().simularLinea(" + viajeId + ",\"" + resumen+"\");", 1000 * velocidadViaje);
    },

	initLayerSimulateViaje: function(viajeId) {
		/*if (this.layerSimulate != null) {
			cMapController.getMapById(this.mapaId).getMap().removeLayer(this.layerSimulate[0]);
			this.layerSimulate[0].destroy();
			cMapController.getMapById(this.mapaId).getMap().removeLayer(this.layerSimulate[1]);
			this.layerSimulate[1].destroy();
			cMapController.getMapById(this.mapaId).getMap().removeLayer(this.layerSimulate[2]);
			this.layerSimulate[2].destroy();
		}*/

		this.layerSimulate = new Array();
		this.layerSimulate[0] = new OpenLayers.Layer.Vector("");
		this.layerSimulate[0].div.style.zIndex = 600;
		cMapController.getMapById(this.mapaId).getMap().addLayer(this.layerSimulate[0]);

		this.layerSimulate[1] = new OpenLayers.Layer.Markers("");
		cMapController.getMapById(this.mapaId).getMap().addLayer(this.layerSimulate[1]);
		this.layerSimulate[1].div.style.zIndex = 900;

		this.layerSimulate[2] = new OpenLayers.Layer.Markers("");
		cMapController.getMapById(this.mapaId).getMap().addLayer(this.layerSimulate[2]);
		this.layerSimulate[2].div.style.zIndex = 900;
		
		this.layersSimulacionViajes.put(viajeId.toString(), this.layerSimulate);
	},

    simularViaje: function(viajeId,resumen) {
    	var viaje = this.viajesHash.get(viajeId.toString());
    	if (viaje == null) {
    		alert('Viaje no encontrado');
    		return;
    	}
    	//TODO:controlar si ya esta simulando OTRO viaje
    	if (this.simulandoViajeId != '' && this.simulandoViajeId != viajeId) {
    		alert('Ya se esta simulando un viaje. Intente al terminar.');
    		return;
    	}
    	var nombreBotonPlay = 'btnPlayViaje' + viajeId;
    	var botonPlay = document.getElementById(nombreBotonPlay);
    	if (this.simulandoViajeId == viajeId && this.simulacionEnPausa == false) { //ya esta simulando, es PAUSA
    		botonPlay.className = "icono play";
    		this.simulacionEnPausa = true;
    		return;
    	}
    	botonPlay.className = "icono pausa";
    	if (this.simulacionEnPausa == true) { //esta en pausa
    		this.simulacionEnPausa = false;
    		return;
    	} else { //Comienza una nueva simulacion
    		var layerSimulate  = this.layersSimulacionViajes.get(viajeId.toString());
    		if(layerSimulate!=null){
    			if(confirm("El Viaje ya se simulo y se encuentra mapeado,\nQuiere volver a simularlo?")){
    				this.limpiarSimulacionViaje(viajeId.toString());
    			}else{
    				return false;
    			}
    		}
    		dejarDeSeguir();
    		this.initLayerSimulateViaje(viajeId);
    		this.lastPosViajeSimulate = 0;
    		this.simulandoViajeId = viajeId;
    		this.simulacionEnPausa = false;
    		this.simularLinea(viajeId,resumen);
    	}
    },
    cambiarVelocidadSimulacionViaje: function(me){
    	this.velocidadSimulacionViaje = me.value;
    },

    clearAllViajes: function(){
    	var vKeys = this.layersViajes.keys();
    	for(var i=0; i< vKeys.length; i++){
    		this.clearViaje(vKeys[i]);
    		desactivarDiv("id_"+vKeys[i]+"");
    	}
    	this.mostrarBorrarMapeos();
    },
    
	clearViaje: function (viajeId) {
    	if (cMapController.getMapById(this.mapaId).getHighlightCercaniasLayer()) {
			cMapController.getMapById(this.mapaId).removeHighlightCercanias();
      	}
		layerViajeArray = this.layersViajes.get(viajeId.toString());
    	if (layerViajeArray == null) {
    		alert('Viaje no mapeado!');
    		return;
    	}
    	var layerViaje = layerViajeArray[2];
    	cMapController.getMapById(this.mapaId).getMap().removeLayer(layerViaje);
		layerViaje.destroy();

		var layerInicio = layerViajeArray[0];
		cMapController.getMapById(this.mapaId).getMap().removeLayer(layerInicio);
		layerInicio.destroy();
		var layerFin = layerViajeArray[1];
		cMapController.getMapById(this.mapaId).getMap().removeLayer(layerFin);
		layerFin.destroy();

		this.layersViajes.remove(viajeId.toString());
		
		var oLayer = this.layersHistoricoViajeInfoPoints[viajeId.toString()];
    	if(oLayer!=null){
    		cMapController.getMapById(this.mapaId).getMap().removeLayer(oLayer);
    		oLayer.destroy();
    		this.layersHistoricoViajeInfoPoints[viajeId.toString()] = null;
    	}
    	this.bVerInfoPointsViajes[viajeId.toString()] = false;
	},

	 ocultarHistoricoInfoPointsViajes: function(mapaId,idRec,id){
    	clickMap5(mapaId);
    	
    	this.bVerInfoPointsViajes[idRec] = false;
    	
    	$j("#histIniVerPuntosViajeA"+idRec+mapaId).html("Ver puntos de viaje");
    	$j("#histIniVerPuntosViajeB"+idRec+mapaId).html("Ver puntos de viaje");
    	$j("#histFinVerPuntosViajeA"+idRec+mapaId).html("Ver puntos de viaje");
    	$j("#histFinVerPuntosViajeB"+idRec+mapaId).html("Ver puntos de viaje");

    	$j("#histIniVerPuntosViajeA"+idRec+mapaId).unbind('click');
    	$j("#histIniVerPuntosViajeB"+idRec+mapaId).unbind('click');
    	$j("#histFinVerPuntosViajeA"+idRec+mapaId).unbind('click');
    	$j("#histFinVerPuntosViajeB"+idRec+mapaId).unbind('click');
    	var newclick = new Function("cMapController.getMapById("+mapaId+").getHistorico().drawHistoricoInfoPointsViajes("+mapaId+","+idRec+","+id+")");
    	$j("#histIniVerPuntosViajeA"+idRec+mapaId).attr('onclick', '').click(newclick);
    	$j("#histIniVerPuntosViajeB"+idRec+mapaId).attr('onclick', '').click(newclick);
    	$j("#histFinVerPuntosViajeA"+idRec+mapaId).attr('onclick', '').click(newclick);
    	$j("#histFinVerPuntosViajeB"+idRec+mapaId).attr('onclick', '').click(newclick);
    	var oLayer = this.layersHistoricoViajeInfoPoints[idRec];
    	if(oLayer!=null){
    		cMapController.getMapById(mapaId).getMap().removeLayer(oLayer);
    		oLayer.destroy();
    		this.layersHistoricoViajeInfoPoints[idRec] = null;
    	}
    },
    
    drawHistoricoInfoPointsViajes: function(mapaId,idRec,viajeId){
    	clickMap5(mapaId);
    	var arrayPoints =  cMapController.getMapById(mapaId).getHistorico().getInfoPointsViajes(idRec);
    	$j("#histIniVerPuntosViajeA"+idRec+mapaId).html("Ocultar puntos de viajes");
    	$j("#histIniVerPuntosViajeB"+idRec+mapaId).html("Ocultar puntos de viajes");
    	$j("#histFinVerPuntosViajeA"+idRec+mapaId).html("Ocultar puntos de viajes");
    	$j("#histFinVerPuntosViajeB"+idRec+mapaId).html("Ocultar puntos de viajes");

    	$j("#histIniVerPuntosViajeA"+idRec+mapaId).unbind('click');
    	$j("#histIniVerPuntosViajeB"+idRec+mapaId).unbind('click');
    	$j("#histFinVerPuntosViajeA"+idRec+mapaId).unbind('click');
    	$j("#histFinVerPuntosViajeB"+idRec+mapaId).unbind('click');
    	var newclick = new Function("cMapController.getMapById("+mapaId+").getHistorico().ocultarHistoricoInfoPointsViajes("+mapaId+","+idRec+","+viajeId+")");
    	$j("#histIniVerPuntosViajeA"+idRec+mapaId).attr('onclick', '').click(newclick);
    	$j("#histIniVerPuntosViajeB"+idRec+mapaId).attr('onclick', '').click(newclick);
    	$j("#histFinVerPuntosViajeA"+idRec+mapaId).attr('onclick', '').click(newclick);
    	$j("#histFinVerPuntosViajeB"+idRec+mapaId).attr('onclick', '').click(newclick);
    	
    	this.bVerInfoPointsViajes[idRec] = true;
    	if(this.layersHistoricoViajeInfoPoints[idRec] == null || this.layersHistoricoViajeInfoPoints[idRec] == undefined ){
    		this.layersHistoricoViajeInfoPoints[idRec] = new OpenLayers.Layer.Markers("infoPointsViajes"+idRec);
    		cMapController.getMapById(mapaId).getMap().addLayer(this.layersHistoricoViajeInfoPoints[idRec]);
    	}
    	var imprimoPunto 	= true;
    	var dist = 0;
    	if(arrayPoints.length>0){
    		for (var i=1; i<arrayPoints.length-1; i++) {
    			var point = arrayPoints[i];
    			var point2 = arrayPoints[i+1];
    			
    			if(imprimoPunto){
    				var LonLatInfo = new OpenLayers.LonLat(point.longitud, point.latitud).transform(cMapController.getMapById(mapaId).getDisplayProjection(), cMapController.getMapById(mapaId).getProjection());
    				if(LonLatInfo) {
    					// vertice marker icons
    					var size 		= new OpenLayers.Size(11,11);
    					var offset 		= new OpenLayers.Pixel(-(size.w/2), -(size.h));
    					var icon 		= new OpenLayers.Icon('images/vertice.png', size, offset);
    					var html 		= this.getInfoRecorridoHistoricoInfoPoints(viajeId,point, "viaje");
    					
    					var markerVertice = new OpenLayers.Marker(LonLatInfo,icon, html);
    					
    					markerVertice.events.register('click', markerVertice, function(evt){
    						cMapController.getMapById(mapaId).openInfoEvento(this.lonlat,this.aux );
    					});
    					markerVertice.events.register('mouseover', markerVertice, function(evt) {
    						this.setUrl('images/verticeHover.png');
    					});
    					markerVertice.events.register('mouseout', markerVertice, function(evt) {
    						this.setUrl('images/vertice.png');
    					});
    					this.layersHistoricoViajeInfoPoints[idRec].addMarker(markerVertice);
    				}
    			}
	    		  
    			var lat1	= point.latitud;
    			var lon1	= point.longitud;
    			var lat2	= point2.latitud;
    			var lon2	= point2.longitud;
    			dist 	+= distanciaEntrePuntos(lat1, lon1, lat2, lon2)*1000;
    			var sentido		= point.sentidoPalabra;
    			var sentido2	= point2.sentidoPalabra;
    			imprimoPunto = false;
    			if(DISTANCIA_ENTRE_PUNTOS<=dist || sentido!=sentido2){
    				imprimoPunto = true;
    				dist = 0;
    			}
    			this.layersHistoricoViajeInfoPoints[idRec].div.style.zIndex = 902;
    		}
    	}
    },
    getInfoPointsViajeIni: function(id,mapaId,viajeId,resumen){
    	var point 		= this.infoPointsViajes[viajeId.toString()][0];
		var mapaId 		= cMapController.getMapActive().getId();
		var LonLatInicio= new OpenLayers.LonLat(point.longitud, point.latitud).transform(cMapController.getMapActive().getDisplayProjection(), cMapController.getMapActive().getProjection() );
		var movil 		= misVehiculosHash.get(point.movil);
		var html = "<div style='width:220px;height:150px;'>";//div1
    	html += '<table width="200" border="0" cellpadding="0" cellspacing="0" >';
		html += '<tr><td colspan="2"><span class="resaltado">Inicio de viaje n&deg;'+id+' </span></td></tr>';
		var myDate2 = new MyDate(point.fechaMensaje);
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Fecha GPS: </span></span><span class="inputTEXT">' + myDate2.elegantFormat() + '</span></td></tr>';
		html += '<tr id="posic_'+viajeId+mapaId+'"><td colspan="2" align="left"><a href="javascript:;" onclick="clickMap5('+mapaId+');$j(\'#histIniViaje_'+viajeId+mapaId+'\').hide();$j(\'#posic_'+viajeId+mapaId+'\').hide();$j(\'#histIniViaje_'+viajeId+mapaId+'_posicion\').show();$j(\'#resum_'+viajeId+mapaId+'\').show();">Ver datos de posicion</a></td></tr>'; 
		html += '<tr id="resum_'+viajeId+mapaId+'" style="display:none;" ><td colspan="2" align="left"><a href="javascript:;" onclick="clickMap5('+mapaId+');$j(\'#histIniViaje_'+viajeId+mapaId+'\').show();$j(\'#posic_'+viajeId+mapaId+'\').show();$j(\'#histIniViaje_'+viajeId+mapaId+'_posicion\').hide();$j(\'#resum_'+viajeId+mapaId+'\').hide();">Ver resumen</a></td></tr>';
		if(!this.bVerInfoPointsViajes[viajeId]){
			html +='<tr><td colspan="2" align="left"><a href="javascript:;" onclick="cMapController.getMapById('+mapaId+').getHistorico().drawHistoricoInfoPointsViajes('+mapaId+','+viajeId+','+id+');" id="histIniVerPuntosViajeA'+viajeId+mapaId+'">Ver puntos de viaje</a></td></tr>';
		}else{	
			html +='<tr><td colspan="2" align="left"><a href="javascript:;" onclick="cMapController.getMapById('+mapaId+').getHistorico().ocultarHistoricoInfoPointsViajes('+mapaId+','+viajeId+','+id+');" id="histIniVerPuntosViajeB'+viajeId+mapaId+'">Ocultar puntos de viaje</a></td></tr>';
		}
		html += '</table>';
		html += "<div id='histIniViaje_"+viajeId+mapaId+"'>";//div2
		html += '<table>';
		html += '<tr><td colspan="2" align="left"><hr></td></tr>';
    	html += '<tr><td colspan="2" align="left"><span class="inputLBL" style="margin-left:0px;">Movil: </span><span class="inputTEXT">' + movil.label + '</span></td></tr>';
    	html += '<tr><td colspan="2" align="left" class="inputLBL" style="margin-left:0px;">';
    	html += resumen;
		html += '</td></tr>';
		html += '<tr><td colspan="2" align="left"><hr></td></tr>';
		html += '</table>';
        html += '</div>';//div2 Fin
    	html += "<div id='histIniViaje_"+viajeId+mapaId+"_posicion' style='display:none;'>";//div3
        html += "<div style='overflow:auto;height:88px;' >";//div4
        html += '<table>';
    	html += '<tr><td colspan="2" align="left"><hr></td></tr>';
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Direcci&oacute;n: </span><span class="inputTEXT">' + point.direccionAbrev + '</span></td></tr>';
    	html += '<tr><td colspan="2" align="left"><span class="inputLBL">Latitud: </span><span class="inputTEXT">' + point.latitud + '</span></td></tr>';
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Longitud: </span><span class="inputTEXT">' + point.longitud + '</span></td></tr>';
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Sat&eacute;lites: </span><span class="inputTEXT">' + point.satelites + '</span></td></tr>';
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Sentido: </span><span class="inputTEXT">' + point.sentidoPalabra + '</span></td></tr>';
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Velocidad: </span><span class="inputTEXT">' + point.velocidad + '</span></td></tr>';
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Evento: </span><span class="inputTEXT">' + point.evento + '</span></td></tr>';
		html += '</table>';
		html += '</div>';
		html += '</div>';
		html += '</div>';
		return html;
    },
    getInfoPointsViajeFin: function(id,mapaId,viajeId,resumen){
    	var point 		= this.infoPointsViajes[viajeId.toString()][0];
		var mapaId 		= cMapController.getMapActive().getId();
		var LonLatInicio= new OpenLayers.LonLat(point.longitud, point.latitud).transform(cMapController.getMapActive().getDisplayProjection(), cMapController.getMapActive().getProjection() );
		var movil 		= misVehiculosHash.get(point.movil);
		var html = "<div style='width:220px;height:150px;'>";//div1
    	html += '<table width="200" border="0" cellpadding="0" cellspacing="0" >';
		html += '<tr><td colspan="2"><span class="resaltado">Fin de viaje n&deg;'+id+' </span></td></tr>';
		var myDate2 = new MyDate(point.fechaMensaje);
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Fecha GPS: </span></span><span class="inputTEXT">' + myDate2.elegantFormat() + '</span></td></tr>';
		html += '<tr id="posicFin_'+viajeId+mapaId+'"><td colspan="2" align="left"><a href="javascript:;" onclick="clickMap5('+mapaId+');$j(\'#histFinViaje_'+viajeId+mapaId+'\').hide();$j(\'#posicFin_'+viajeId+mapaId+'\').hide();$j(\'#histFinViaje_'+viajeId+mapaId+'_posicion\').show();$j(\'#resumFin_'+viajeId+mapaId+'\').show();">Ver datos de posicion</a></td></tr>'; 
		html += '<tr id="resumFin_'+viajeId+mapaId+'" style="display:none;" ><td colspan="2" align="left"><a href="javascript:;" onclick="clickMap5('+mapaId+');$j(\'#histFinViaje_'+viajeId+mapaId+'\').show();$j(\'#posicFin_'+viajeId+mapaId+'\').show();$j(\'#histFinViaje_'+viajeId+mapaId+'_posicion\').hide();$j(\'#resumFin_'+viajeId+mapaId+'\').hide();">Ver resumen</a></td></tr>';
		if(!this.bVerInfoPointsViajes[viajeId]){
			html +='<tr><td colspan="2" align="left"><a href="javascript:;" onclick="cMapController.getMapById('+mapaId+').getHistorico().drawHistoricoInfoPointsViajes('+mapaId+','+viajeId+','+id+');" id="histFinVerPuntosViajeA'+viajeId+mapaId+'">Ver puntos de viaje</a></td></tr>';
		}else{	
			html +='<tr><td colspan="2" align="left"><a href="javascript:;" onclick="cMapController.getMapById('+mapaId+').getHistorico().ocultarHistoricoInfoPointsViajes('+mapaId+','+viajeId+','+id+');" id="histFinVerPuntosViajeB'+viajeId+mapaId+'">Ocultar puntos de viaje</a></td></tr>';
		}
		html += '</table>';
		html += "<div id='histFinViaje_"+viajeId+mapaId+"'>";//div2
		html += '<table>';
		html += '<tr><td colspan="2" align="left"><hr></td></tr>';
    	html += '<tr><td colspan="2" align="left"><span class="inputLBL" style="margin-left:0px;">Movil: </span><span class="inputTEXT">' + movil.label + '</span></td></tr>';
    	html += '<tr><td colspan="2" align="left" class="inputLBL" style="margin-left:0px;"> ';
    	html += resumen;
    	html += '</td></tr>';
        html += '<tr><td colspan="2" align="left"><hr></td></tr>';
        html += '</table>';
        html += '</div>';//div2 Fin
		html += "<div id='histFinViaje_"+viajeId+mapaId+"_posicion' style='display:none;'>";
        html += "<div style='overflow:auto;height:88px;' >";
        html += '<table>';
    	html += '<tr><td colspan="2" align="left"><hr></td></tr>';
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Direcci&oacute;n: </span><span class="inputTEXT">' + point.direccionAbrev + '</span></td></tr>';
    	html += '<tr><td colspan="2" align="left"><span class="inputLBL">Latitud: </span><span class="inputTEXT">' + point.latitud + '</span></td></tr>';
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Longitud: </span><span class="inputTEXT">' + point.longitud + '</span></td></tr>';
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Sat&eacute;lites: </span><span class="inputTEXT">' + point.satelites + '</span></td></tr>';
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Sentido: </span><span class="inputTEXT">' + point.sentidoPalabra + '</span></td></tr>';
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Velocidad: </span><span class="inputTEXT">' + point.velocidad + '</span></td></tr>';
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Evento: </span><span class="inputTEXT">' + point.evento + '</span></td></tr>';
		html += '</table>';
		html += '</div>';
		html += '</div>';
		html += '</div>';
    	return html;
    },
	showViaje: function (viajeId, resumen) {
		var viaje = this.viajesHash.get(viajeId.toString());
    	if (viaje == null) {
    		alert('Viaje no encontrado');
    		return;
    	}
    	if (viaje.vListadoPuntos.length < 2) {
    		alert('El viaje solo contiene un punto. Imposible mapear.');
    		return;
    	}
    	var viajeMostrado = this.layersViajes.get(viajeId.toString());
    	if (viajeMostrado != null) {
    		alert('El viaje ya est� mapeado');
    		return false;
    	}
    	
		dejarDeSeguir();
		var lotePoints 	= new Array();
		var puntos = viaje.vListadoPuntos;
		var latLonInicio = null;
		var latLonFin = null;
		
		createFeaturePoint = function(idMap, point, color){
 			var colorFill = "#FFFFFF";
 			if (color)
 				colorFill = color;
 			var radio = cMapController.getMapById(idMap).getMap().getExtent().getHeight()/25;
 			var objF = OpenLayers.Geometry.Polygon.createRegularPolygon(point, radio, 20, 90);
 			var theFeature = new OpenLayers.Feature.Vector(objF,null,{
             					strokeColor: "#202020",
 								fillColor: colorFill,
             					strokeOpacity: 0.6,
 								fillOpacity: 0.6,
             					strokeWidth: 3
         					 });
 			return theFeature;
 		}
		
		this.historicoFeatureBounds = new OpenLayers.Bounds();
		this.infoPointsViajes[viajeId.toString()] = new Array();
		for (var i=0; i < puntos.length; i++){
    		var point = new OpenLayers.Geometry.Point(puntos[i].longitud, puntos[i].latitud).transform(cMapController.getMapById(this.mapaId).getDisplayProjection(), 	cMapController.getMapById(this.mapaId).getProjection());
    		this.infoPointsViajes[viajeId.toString()].push(puntos[i]);
			this.historicoFeatureBounds.extend(point);
			lotePoints.push(point);
			if(i == 0){
				latLonInicio = new OpenLayers.LonLat(puntos[i].longitud, puntos[i].latitud).transform(cMapController.getMapById(this.mapaId).getDisplayProjection(), 	cMapController.getMapById(this.mapaId).getProjection());
				var pointInicio = new OpenLayers.Geometry.Point(puntos[i].longitud, puntos[i].latitud).transform(cMapController.getMapById(this.mapaId).getDisplayProjection(), cMapController.getMapById(this.mapaId).getProjection());
			}
			if(i == puntos.length-1){
				latLonFin = new OpenLayers.LonLat(puntos[i].longitud, puntos[i].latitud).transform(cMapController.getMapById(this.mapaId).getDisplayProjection(), 	cMapController.getMapById(this.mapaId).getProjection());
				var pointFin = new OpenLayers.Geometry.Point(puntos[i].longitud, puntos[i].latitud).transform(cMapController.getMapById(this.mapaId).getDisplayProjection(), cMapController.getMapById(this.mapaId).getProjection());
			}
		}

		/*inicio*/
		var layerMarkerInicio = new OpenLayers.Layer.Markers("");
		cMapController.getMapById(this.mapaId).getMap().addLayer(layerMarkerInicio);
		layerMarkerInicio.div.style.zIndex = 900;
		var feature = new OpenLayers.Feature(layerMarkerInicio, latLonInicio);
        feature.closeBox = true;
        feature.popupClass = historicoPopupClass;
        feature.data.popupContentHTML = "Inicio de viaje";
        feature.data.overflow = "auto";
		feature.data.icon = mapIcons.getHistoricoIcon('inicio');
		var marker = feature.createMarker();
		var mapaId = this.mapaId;
		marker.events.register("click", feature,  function() {
			cMapController.getMapById(mapaId).openInfoEvento(latLonInicio, cMapController.getMapById(mapaId).getHistorico().getInfoPointsViajeIni(viaje.id,mapaId,viajeId,resumen));
		});
		layerMarkerInicio.addMarker(marker);
		
		/*Fin*/
		var layerMarkerFin = new OpenLayers.Layer.Markers("");
		cMapController.getMapById(this.mapaId).getMap().addLayer(layerMarkerFin);
		layerMarkerFin.div.style.zIndex = 900;
		var feature = new OpenLayers.Feature(layerMarkerFin, latLonFin);
        feature.closeBox = true;
        feature.popupClass = historicoPopupClass;
        feature.data.popupContentHTML = "Fin de viaje";
        feature.data.overflow = "auto";
		feature.data.icon = mapIcons.getHistoricoIcon('fin');
		var marker = feature.createMarker();
		marker.events.register("click", feature,  function() {
			cMapController.getMapById(mapaId).openInfoEvento(latLonFin, cMapController.getMapById(mapaId).getHistorico().getInfoPointsViajeFin(viaje.id,mapaId,viajeId,resumen));
		});
		layerMarkerFin.addMarker(marker);

		/*Recorrido*/
		var layer = new OpenLayers.Layer.Vector("");
		layer.div.style.zIndex = 600;
		var feature = this.drawViajePolyLine(lotePoints, '#3CFF14');
		layer.addFeatures(feature);
		cMapController.getMapById(this.mapaId).getMap().addLayer(layer);
		if(this.zoomSimulacionViaje){
			cMapController.getMapById(this.mapaId).centrarEnBounds(this.historicoFeatureBounds);
		}else{
			cMapController.getMapById(this.mapaId).getMap().setCenter(this.historicoFeatureBounds.getCenterLonLat());
		}

		layersArrayViaje = new Array();
		layersArrayViaje[0] = layerMarkerInicio;
		layersArrayViaje[1] = layerMarkerFin;
		layersArrayViaje[2] = layer;
		this.layersViajes.put(viajeId.toString(), layersArrayViaje);
		
		if (cMapController.getMapById(this.mapaId).getHighlightCercaniasLayer()) {
			cMapController.getMapById(this.mapaId).removeHighlightCercanias();
      	}
		cMapController.getMapById(this.mapaId).setHighlightCercaniasLayer(new OpenLayers.Layer.Vector("highlightCercanias"));
		
		var featI = createFeaturePoint(this.mapaId,pointInicio, "#008000");
		var featF = createFeaturePoint(this.mapaId,pointFin, "#0000FF");
		var featLine = this.drawViajePolyLine(lotePoints, '#000000');
		cMapController.getMapById(this.mapaId).getHighlightCercaniasLayer().addFeatures(featI);
		cMapController.getMapById(this.mapaId).getHighlightCercaniasLayer().addFeatures(featF);
		cMapController.getMapById(this.mapaId).getHighlightCercaniasLayer().addFeatures(featLine);
		//add layer
		cMapController.getMapById(this.mapaId).getMap().addLayer(cMapController.getMapById(this.mapaId).getHighlightCercaniasLayer());
		//set timeOut for the layer
		clearTimeout(cMapController.getMapById(this.mapaId).getHighlightViajesTimeOut());
		cMapController.getMapById(this.mapaId).setHighlightViajesTimeOut(setTimeout( "cMapController.getMapById("+this.mapaId+").removeHighlightCercanias();", 10000) );
	},

	drawViajePolyLine: function(arrayPoints, color){ //recibe un Array de OpenLayer.Geometry.Points
		var lineString = new OpenLayers.Geometry.LineString(arrayPoints);
		var feature = new OpenLayers.Feature.Vector(lineString, null,{
	            strokeColor: color,
	            strokeWidth: 6,
				strokeOpacity: 0.5
		        });
		return feature;
	},

	cancelarViajes: function(){

	},
	/////////////VIAJES///////////////////////
    mostrarFiltroViajesDiaAnt:function(){
      var dFecha 	= $j("#ultDia").val();
      var tFecha  	= dFecha.split(" ");
      var vFecha 	= tFecha[0].split("-");
      var anio		= vFecha[0];
      var mes		= vFecha[1]-1;
      var dia		= vFecha[2];
      var Time		= tFecha[1].split(":");
      var hora		= Time[0];
      var min		= Time[1];
      var miFecha	= new Date(anio,mes,dia,hora,min,"00");
      var time		= miFecha.getTime();
      time 			= time - 86400000;//resto 1 dia
      miFecha 		= new Date(time);
      this.SubmitHistoricoReporteViajes(true,miFecha);
    },
    
    mostrarFiltroViajesDiaPost:function(){
      var dFecha 	= $j("#ultDia").val();
      var tFecha  	= dFecha.split(" ");
      var vFecha 	= tFecha[0].split("-");
      var anio		= vFecha[0];
      var mes		= vFecha[1]-1;
      var dia		= vFecha[2];
      var Time		= tFecha[1].split(":");
      var hora		= Time[0];
      var min		= Time[1];
      var miFecha	= new Date(anio,mes,dia,hora,min,"00");
      var time		= miFecha.getTime();
      time 			= time + 86400000;//resto 1 dia
      miFecha 		= new Date(time);
      this.SubmitHistoricoReporteViajes(true,miFecha);
    },
    actualizaViajesUltDia:function(){
    	var dFecha 	= $j("#ultDia").val();
    	var tFecha  	= dFecha.split(" ");
    	var vFecha 	= tFecha[0].split("-");
    	var anio		= vFecha[0];
    	var mes		= vFecha[1]-1;
    	var dia		= vFecha[2];
    	var Time		= tFecha[1].split(":");
    	var hora		= Time[0];
    	var min		= Time[1];
    	var miFecha	= new Date(anio,mes,dia,hora,min,"00");
    	this.SubmitHistoricoReporteViajes(true,miFecha);
    },

	SubmitHistoricoReporteViajes: function(ultDia,miFecha){
    	if(esMoviloFijo() == "FIJOS"){
    		alert("Seleccione una cuenta 'Movil' para ejecutar un reporte de viajes");
    		return false;
    	}
    	var div ="";
    	$j('#div_ResultDiaViaje').html("");
    	$j('#div_ResultViaje').html("");
    	if(ultDia){//filtro ultimo dia
	    	if(typeof(miFecha) != "undefined"){
		    	var actualDate 	= miFecha;
		    }else{
		     	var actualDate = new Date();
		    }
	    	actualDate.setHours(23, 59, 59, 999);
		   	$j('#navDiaPost').show();
			if(actualDate.getDate() == new Date().getDate()){
				if(actualDate.getMonth() == new Date().getMonth()){
					if(actualDate.getFullYear() == new Date().getFullYear()){
		    			$j('#navDiaPost').hide();
				    }
				 }
			}
			var time 		= actualDate.getTime();
		    //time 			= time - 86400000;//resto 1 dia
		    lastDate 		= new Date(time);
			lastDate.setHours(0,0,0,0);
		    var fI 			= lastDate.print("%Y-%m-%d %H:%M");
		    var fF 			= actualDate.print("%Y-%m-%d %H:%M");
		    $j("#diaViaje").text(actualDate.print("%d/%m/%Y"));
		    $j("#ultDia").val(actualDate.print("%Y-%m-%d %H:%M"));
		    div =  $j('#div_ResultDiaViaje');
		    hideDiv('div_filtroHistoricoViajes');
		    showDiv('div_filtroUltDiaHistoricoViajes');
    	}else{// filtro por fechas
    		if($j("#tipoFiltroFechas").val()==2){
    			if(!esFechaValida($j("#fechaDiaCompleto"),false,$j("#errorFechaDiaCompletoViajes"))){
        			return false;
        		}
    			fI = $j("#fechaDiaCompleto").val() + " 00:00";
    			fF = $j("#fechaDiaCompleto").val() + " 23:59";
    		}else{
	    		if(!esFechaValida($j("#fechaInicioHistoricoViajes"),true,$j("#errorFechaIniViajes"))){
	    			return false;
	    		}
	    		if(!esFechaValida($j("#fechaFinHistoricoViajes"),true,$j("#errorFechaFinViajes"))){
	    			return false;
	    		}
	    		fI = $j("#fechaInicioHistoricoViajes").val();
	    		fF = $j("#fechaFinHistoricoViajes").val();
    		}
    		
    		fI = dateToMySQL(fI);
    		fF = dateToMySQL(fF);
    		div = $j('#div_ResultViaje');
    		hideDiv('div_filtroUltDiaHistoricoViajes');
    	}
		var movil 		= $j("#cuentaSelectHistorico").val();
	    var labelMovil 	= $j("#labelMovil").val();
		this.zoomSimulacionViaje = true;
		var listado 	= "";
		$j.ajax({
		      type: "POST",
		      url: "querycontroller.php",
		      data: "COMMAND=VIAJES&fechaIni="+fI+"&fechaFin="+fF+"&movil="+movil+"&labelMovil="+labelMovil+"",
		      beforeSend: function(){
				$j('#LoaderAjax').show();
		      },
		      success: function(data) {
		    	$j('#LoaderAjax').hide();
		    	if(data.trim()!=""){
			        var dataAux =	jQuery.parseJSON(data);
			        var reproductor = "reproductor";
			        var id		= "id";
			        if (dataAux.length != 'undefined') {
			        	if(dataAux.length >0){
				           listado = "<table class='tabla' border='0' cellpadding='0' cellspacing='0'>";
						   listado += "<thead><tr>";
				           listado += "<th scope='col'>Viaje</th>"
				                + "<th scope='col'>Km.</th> "
				                + "<th scope='col'>Acciones</th>"
				           		+ "<th scope='col' style='background-color: #EAECEE;width:25px;'>" 
				           		+ "<a href='javascript:'  style='padding-left:5px; display:block;' id='zoomViaje' onclick='cMapController.getMapActive().getHistorico().mantieneZoomViaje();' class='icono zoom_auto' title='Pasar a zoom manual'></a>" 
				           		+ "</th></tr></thead>";
				           
				           listado += "<tbody>";
					          for(var i=0; i < dataAux.length; i++){
					        	 
					        	//para que no se repitan los viajesId si uno mapea varios recorridos en diferentes fechas  
					        	var str = Math.random();
					        	str		= str.toPrecision(5);
					        	str 	= str.toString();
					        	str 	= str.substring(2);
					        	
					            var viajeId = dataAux[i].id.toString() + str.toString();// + dataAux[i].movil.toString();
					            cMapController.getMapActive().getHistorico().getViajesHash().put(viajeId.toString(), dataAux[i]);
					            
					            var resumen = "<div><strong>Km totales:&nbsp;</strong>"+dataAux[i].km+"</div>" +
					                          "<div><strong>Tiempo total:&nbsp;</strong>"+dataAux[i].tiempo+"</div>" +
					                          "<div><strong>Fecha inicial:&nbsp;</strong>"+dateMYSQLToDate2(dataAux[i].fechaIni)+"</div>" +
					                          "<div><strong>Fecha final:&nbsp;</strong>"+dateMYSQLToDate2(dataAux[i].fechaFin)+"</div>";
					            
					            var verHTML = '<li><a href="javascript:" onclick="cMapController.getMapActive().getHistorico().showViaje('+ viajeId + ',\''+resumen+'\'); activarDiv(\'id_'+viajeId+'\');" class="icono miniVer" title="Mapear recorrido"></a><li>';
								
					            var borrarHTML = '<li><a href="javascript:" onclick="cMapController.getMapActive().getHistorico().clearViaje(' + viajeId + ');desactivarDiv(\'id_'+viajeId+'\');" class="icono limpiar2" title="Borrar mapeo"></a><li>';
								
					            var simularHTML = '<li class="ultimo"><a href="javascript:" onclick="cMapController.getMapActive().getHistorico().showReproductorViaje(' + viajeId + ',\''+resumen+'\');" class="icono simular" title="Simular viaje"></a><li>';
								
					            var resumenHTML = '<li><a href="javascript:" onclick="cMapController.getMapActive().getHistorico().showResumenViaje(' + viajeId + ');" class="icono verReporte" title="Ver/Ocultar resumen de viaje"></a><li>';
								
					            listado += "<tr id='id_"+viajeId+"'><td>"+dataAux[i].id+"</td><td>"+dataAux[i].km+"</td><td  colspan='2'><div class='barra_acordeon' style='border:none; background:none; padding:2px 0 5px;'><ul>" + verHTML + borrarHTML + resumenHTML + simularHTML +"</ul></div></td></tr>";
								
					            listado += "<tr align='left'><td colspan='4'  style='background-color:#F2F2F2;' >" +
					                   		"<div id='resumen" + viajeId + "' class='tabular' style='display:none;padding-bottom:35px; padding-top:4px; text-align:left;'>" +
					                          "<div><strong>Km totales:&nbsp;</strong>"+dataAux[i].km+"</div>" +
					                          "<div><strong>Tiempo total:&nbsp;</strong>"+dataAux[i].tiempo+"</div>" +
					                          "<div><strong>Fecha inicial:&nbsp;</strong>"+dateMYSQLToDate2(dataAux[i].fechaIni)+"</div>" +
					                          "<div><strong>Fecha final:&nbsp;</strong>"+dateMYSQLToDate2(dataAux[i].fechaFin)+"</div>" +
					                          "<div><strong><a href='javascript:;' onclick='SubmitReporteViajes(\""+movil+"\",\""+dataAux[i].fechaIni+"\",\""+dataAux[i].fechaFin+"\",\""+dataAux[i].km+"\")' >Ver puntos</a></strong></div>" +
					                   "</div></td></tr>";	   
					            listado += "<tr><td colspan='4' style='background-color:#D7DFE3; align:left;'>" +
						                   "<div id='reproductor" + viajeId + "' style='display:none;text-align:left;padding-bottom:35px;'>" +
						                   "</div></td></tr>";
					            
					          }
							  
				          	listado +=  "</tbody></table>";
				        	div.html(listado);
				        	cMapController.getMapActive().getHistorico().setResultadoFiltroViajes(listado);
				        	cMapController.getMapActive().getHistorico().setDivIdResultadoFiltroViajes(div.attr("id"));
				        	cMapController.getMapActive().getHistorico().mostrarBorrarMapeos();//muestra la opcion de borrar todos los mapeos en el pricipal de historico
							
			        	}else{
							div.html("No se encontraron registros.");
							cMapController.getMapActive().getHistorico().setResultadoFiltroViajes("");
						}
						
			        }else{
						div.html("No se encontraron registros.");
						cMapController.getMapActive().getHistorico().setResultadoFiltroViajes("");
					}
		    	}else{
		    		alert("No existen registros para hacer la consulta!. Consulte con el administrador");	
		    	}
					
		       	div.show();
		      }
		    });
	      hideDiv('historcoMenuPPAL');
	      hideDiv('div_filtroHistorico');
	      hideDiv('div_resultadoHistorico');
	      hideDiv('div_filtroHistoricoEventos');
	      hideDiv('div_filtroHistoricoParadas');
	},
	/*
	 *  muestra la opcion de borrar todos los mapeos en el pricipal de historico
	 */
	mostrarBorrarMapeos:function(){  
    	if (this.layersViajes.size()>0 || this.layersSimulacionViajes.size()>0 ) {
    		$j("#borrarMapeosGrales").show();	
    	}else{
    		$j("#borrarMapeosGrales").hide();	
    	}
	},
	mantieneZoomViaje:function(){
		if(!this.zoomSimulacionViaje){
			this.zoomSimulacionViaje = true;
			$j("#zoomViaje").removeClass("zoom_manual").addClass("zoom_auto");
			$j("#zoomViaje").attr("title","Pasar a zoom manual");
		}else{
			this.zoomSimulacionViaje = false;
			$j("#zoomViaje").removeClass("zoom_auto").addClass("zoom_manual");
			$j("#zoomViaje").attr("title","Pasar a zoom automatico");
		}
	},
	
	borrarMarcasHistoricoResumen: function(){
		var layer = cMapController.getMapById(this.mapaId).getLayerEventosReporte();
		if(layer!=null){
			cMapController.getMapById(this.mapaId).getMap().removeLayer(layer);
			layer.destroy();
			cMapController.getMapById(this.mapaId).setLayerEventosReporte(null);
			cMapController.getMapById(this.mapaId).removeHighlightCircle();
		}
	},
	
	getInfoRecorridoHistoricoInfoPoints: function(idRecorrido, point,title) {
		var html = "<div style='width:220px;height:150px;'>";
		html += "<div id='histInfoPoint_"+idRecorrido+"_"+point.id+"'>";
    	html += '<table width="200" border="0" cellpadding="0" cellspacing="0" >';
		html += '<tr><td colspan="2"><span class="resaltado">Punto de '+title+' n&deg;'+idRecorrido+' </span></td></tr>';
		var myDate2 = new MyDate(point.fechaMensaje);
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Fecha GPS: </span></span><span class="inputTEXT">' + myDate2.elegantFormat() + '</span></td></tr>';
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Direcci&oacute;n: </span><span class="inputTEXT">' + point.direccionAbrev + '</span></td></tr>';
    	html += '<tr><td colspan="2" align="left"><span class="inputLBL">Latitud: </span><span class="inputTEXT">' + point.latitud + '</span></td></tr>';
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Longitud: </span><span class="inputTEXT">' + point.longitud + '</span></td></tr>';
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Sat&eacute;lites: </span><span class="inputTEXT">' + point.satelites + '</span></td></tr>';
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Sentido: </span><span class="inputTEXT">' + point.sentidoPalabra + '</span></td></tr>';
		html += '<tr><td colspan="2" align="left"><span class="inputLBL">Velocidad: </span><span class="inputTEXT">' + point.velocidad + '</span></td></tr>';
		html += '</table>';
		html += '</div>';
		html += '</div>';
		return html;
	},
	verPuntosUltimoRecorrido: function(){
		if(this.layersHistoricoRecorrido.length == 0){
			return false;
		}
		var mapaId = this.mapaId;
		//var idRecorrido = this.lastHistoricoID+1;
		var idRecorrido = this.recorridoActivo;
		this.drawHistoricoInfoPoints(mapaId,idRecorrido);
	},
	ocultarPuntosUltimoRecorrido: function(){
		if(this.layersHistoricoRecorrido.length == 0){
			return false;
		}
		var mapaId = this.mapaId;
		//var idRecorrido = this.lastHistoricoID+1;
		var idRecorrido = this.recorridoActivo;
		this.ocultarHistoricoInfoPoints(mapaId,idRecorrido);
	},
	deshabilitarSelectorHistorico: function(){
		if(this.bCuentaHistoricoHabilitado){
			this.bCuentaHistoricoHabilitado = false;
			$j("#cuentaSelectHistorico").attr("disabled", true);
		}
	},
	habilitarSelectorHistorico: function(){
		if(!this.bCuentaHistoricoHabilitado){
			this.bCuentaHistoricoHabilitado = true;
			$j("#cuentaSelectHistorico").removeAttr("disabled");
		}
	},
	mostrarResultadoRecorrido: function(posi,mapaId){
		clickMap5(mapaId);
		clickOpcionAcordeon("historico");
		posi = posi-1;
		var html = this.resultadoHistoricoRecorrido[posi];
		if(html!=""){
			$j("#div_resultadoHistorico").html(html);
			hideDiv('historcoMenuPPAL');
			hideDiv('div_filtroHistorico');
			hideDiv('div_drawHistoricoRecorrido');
			showDiv('div_resultadoHistorico');
		}
	},
	guardarComoRuta: function(){
		var idRec 		= this.recorridoActivo;
		var mapaId		= this.mapaId;
		var arrayPoints = this.infoPoints[idRec];
		if(this.layersHistoricoRecorridoInfoPoints[idRec] == null || this.layersHistoricoRecorridoInfoPoints[idRec] == undefined ){
    		this.layersHistoricoRecorridoInfoPoints[idRec] = new OpenLayers.Layer.Markers("infoPoints"+idRec);
    		cMapController.getMapById(mapaId).getMap().addLayer(this.layersHistoricoRecorridoInfoPoints[idRec]);
    	}
    	var imprimoPunto= true;
    	var dist 		= 0;
    	var puntosRuta 	= new Array();
    	cMapController.getMapActive().setMarkersRutaHistorico(null,0);
    	cMapController.getMapActive().setMarkersRutaHistorico(null,1);
    	if(arrayPoints.length>0){
    		for (var i=0; i<arrayPoints.length-1; i++){
    			var point 	= arrayPoints[i];
    			var point2 	= arrayPoints[i+1];
    			
    			if(imprimoPunto){
    				var LonLatInfo = new OpenLayers.LonLat(point.longitud, point.latitud).transform(cMapController.getMapById(mapaId).getDisplayProjection(), cMapController.getMapById(mapaId).getProjection());
    				if(LonLatInfo){
    					// vertice marker icons
    					var size 	= new OpenLayers.Size(11,11);
    					var offset 	= new OpenLayers.Pixel(-(size.w/2), -(size.h));
    					var icon 	= new OpenLayers.Icon('images/vertice.png', size, offset);
    					var html 	= this.getInfoRecorridoHistoricoInfoPoints(idRec,point,"recorrido historico");
    					
    					var markerVertice = new OpenLayers.Marker(LonLatInfo,icon, html);
    					
    					markerVertice.events.register('click', markerVertice, function(evt){
    						//cMapController.getMapById(mapaId).openInfoEvento(this.lonlat,this.aux );
    						var elementos = document.getElementsByName("iniFin");
				    		for(var i=0; i<elementos.length; i++) {
				    			if(elementos[i].checked){
				    				tipoCreacionRuta = elementos[i].value;
				    				break;
				    			}
				    		}
				    		//var size 		= new OpenLayers.Size(20,34);
				    		//var offset 		= new OpenLayers.Pixel(-(size.w/2), -(size.h));
							if(tipoCreacionRuta==1){//Marca de inicio
								this.setUrl('images/gmapIcons/verticeIni.png');
								markerAnt = cMapController.getMapActive().getMarkersRutaHistorico(0);
							}else if(tipoCreacionRuta==2){//Marca de fin
								this.setUrl('images/gmapIcons/verticeFin.png');
								markerAnt = cMapController.getMapActive().getMarkersRutaHistorico(1);
							}
							//this.draw(offset);
							//this.icon.setSize(size);
							
							if(markerAnt!=null && this!=markerAnt){
							//	var size = new OpenLayers.Size(11,11);
								markerAnt.setUrl('images/vertice.png');
							//	markerAnt.icon.setSize(size);
							}
							
							if(tipoCreacionRuta==1){//inicio
								cMapController.getMapActive().setMarkersRutaHistorico(this,0);//valor,posicion
							}else{//fin
								cMapController.getMapActive().setMarkersRutaHistorico(this,1);
							}
    					});
    					this.layersHistoricoRecorridoInfoPoints[idRec].addMarker(markerVertice);
    					puntosRuta.push(markerVertice);
    				}
    			}
    			var lat1	= point.latitud;
    			var lon1	= point.longitud;
    			var lat2	= point2.latitud;
    			var lon2	= point2.longitud;
    			dist 		+= distanciaEntrePuntos(lat1, lon1, lat2, lon2)*1000;
    			var sentido	= point.sentidoPalabra;
    			var sentido2= point2.sentidoPalabra;
    			imprimoPunto= false;
    			if(DISTANCIA_ENTRE_PUNTOS<=dist || sentido!=sentido2){
    				imprimoPunto = true;
    				dist = 0;
    			}
    			this.layersHistoricoRecorridoInfoPoints[idRec].div.style.zIndex = 902;
    		}
    	}
		cMapController.getMapById(mapaId).crearRutaDesdeHistorico(puntosRuta);
	}
});